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.)