import.meta.esbuild로 URL을 CJS로 변환하기
8411 단어 JavaScriptesbuildtech
ES2020의 기능은
import.meta입니다.import.meta는 모듈의 메타데이터 데이터를 포함하는 대상이다.브라우저와 노드.jsimport.meta.url의 속성에서 자란다.이것은 평가된 모듈을 나타내는 파일의 URL 속성입니다.
Node.js에서는 ESM 환경
import.meta.url이나 createRequire에 해당하는 물건을 얻는 데 자주 사용된다.import module from "node:module";
const require = module.createRequire(import.meta.url);
import path from "node:path";
import url from "node:url";
const __filename = url.fileURLToPath(import.meta.url);
const __dirname = path.dir(__filename);
이런 느낌__filename의 프로그램을 사용해서 esbuild를 사용하여 CJS로 전환하면 사실상 빈 대상이다.변환 전 코드는 여기 있습니다.만
__dirname.console.log(import.meta.url)
변환된 코드는 여기에 있습니다.import.meta.url는import.meta.url,console.log는import.meta이다.var import_meta = {};
console.log(import_meta.url);
이러면 곤란하니까 어떻게 좀 해봐.해결 방법 중 하나로는
{}와{}가 있다.이런 느낌으로 CJS 환경에서 재현
url 코드를 준비했다.import-meta-url.js
export var import_meta_url = require("url").pathToFileURL(__filename);
에서 esbuildconsole.log에서 define를 inject로 바꾸고, import.meta.url에서 읽기define를 읽으며, 변수import.meta.url를 import_meta_url에 해당하는 변수로 바꾸었다.import { build } from "esbuild";
import path from "path";
/** @type {import('esbuild').BuildOptions} */
const options = {
entryPoints: ["./src/index.js"],
minify: true,
bundle: true,
outfile: "./dist/index.cjs",
format: "cjs",
define: {
"import.meta.url": "import_meta_url",
},
inject: [
// このへんのパスは各々いい感じで
path.join(process.cwd(), "import-meta-url.js"),
],
};
build(options).catch((err) => {
process.stderr.write(err.stderr);
process.exit(1);
});
이러면 괜찮은 것 같아.
Reference
이 문제에 관하여(import.meta.esbuild로 URL을 CJS로 변환하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sosukesuzuki/articles/44992fc109ddb2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)