Bundle CLI as ES Module (#13091)
This commit is contained in:
1 parent
a6661e850c
commit
2052ce5cb8
5 files changed
+60
-14
No files matched your search
+2
-10
@@ -11,14 +11,6 @@ function runCli(cli) {
|
||||
return cli.run(process.argv.slice(2));
|
||||
}
|
||||
|
||||
module.exports.promise = (function () {
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
var dynamicImport = new Function("module", "return import(module)");
|
||||
var dynamicImport = new Function("module", "return import(module)");
|
||||
|
||||
return dynamicImport("../src/cli/index.js").then(runCli);
|
||||
}
|
||||
|
||||
var cli = require("../src/cli/index.js");
|
||||
|
||||
return runCli(cli);
|
||||
})();
|
||||
module.exports.promise = dynamicImport("../src/cli/index.js").then(runCli);
|
||||
@@ -145,7 +145,7 @@ async function preparePackage() {
|
||||
prepublishOnly:
|
||||
"node -e \"assert.equal(require('.').version, require('..').version)\"",
|
||||
};
|
||||
packageJson.files = ["*.js", "esm/*.mjs"];
|
||||
packageJson.files = ["*.js", "*.mjs", "esm/*.mjs"];
|
||||
await writeJson(path.join(DIST_DIR, "package.json"), packageJson);
|
||||
|
||||
for (const file of ["README.md", "LICENSE"]) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import esbuildPluginInteropDefault from "./esbuild-plugins/interop-default.mjs";
|
||||
import esbuildPluginVisualizer from "./esbuild-plugins/visualizer.mjs";
|
||||
import esbuildPluginStripNodeProtocol from "./esbuild-plugins/strip-node-protocol.mjs";
|
||||
import esbuildPluginThrowWarnings from "./esbuild-plugins/throw-warnings.mjs";
|
||||
import esbuildPluginShimCommonjsObjects from "./esbuild-plugins/shim-commonjs-objects.mjs";
|
||||
import bundles from "./config.mjs";
|
||||
|
||||
const { dirname, readJsonSync, require } = createEsmUtils(import.meta);
|
||||
@@ -89,8 +90,12 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
||||
|
||||
// Replace other bundled files
|
||||
if (bundle.target === "node") {
|
||||
// Replace bundled files and `package.json` with dynamic `require()`
|
||||
// Replace other bundled files and `package.json` with dynamic `require()`
|
||||
for (const { input, output } of bundledFiles) {
|
||||
if (input === path.join(PROJECT_ROOT, bundle.input)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
replaceModule.push({ module: input, external: output });
|
||||
}
|
||||
|
||||
@@ -241,10 +246,15 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
||||
esbuildOptions.plugins.push(esbuildPluginInteropDefault());
|
||||
}
|
||||
|
||||
// https://github.com/evanw/esbuild/issues/1921
|
||||
if (bundle.format === "esm") {
|
||||
esbuildOptions.plugins.push(esbuildPluginShimCommonjsObjects());
|
||||
}
|
||||
|
||||
yield {
|
||||
...esbuildOptions,
|
||||
outfile: bundle.output,
|
||||
format: "cjs",
|
||||
format: bundle.format ?? "cjs",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import path from "node:path";
|
||||
import { createRequire } from "node:module";
|
||||
import createEsmUtils from "esm-utils";
|
||||
import { PROJECT_ROOT } from "../utils/index.mjs";
|
||||
|
||||
const { require, dirname } = createEsmUtils(import.meta);
|
||||
|
||||
@@ -340,10 +341,17 @@ const coreBundles = [
|
||||
input: "bin/prettier.cjs",
|
||||
output: "bin-prettier.js",
|
||||
esbuildTarget: ["node0.10"],
|
||||
replaceModule: [
|
||||
{
|
||||
module: path.join(PROJECT_ROOT, "bin/prettier.cjs"),
|
||||
process: (text) => text.replace('"../src/cli/index.js"', '"./cli.mjs"'),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
input: "src/cli/index.js",
|
||||
output: "cli.js",
|
||||
output: "cli.mjs",
|
||||
format: "esm",
|
||||
external: ["benchmark"],
|
||||
interopDefault: false,
|
||||
replaceModule: [replaceDiffPackageEntry("lib/patch/create.js")],
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import fs from "node:fs";
|
||||
import { outdent } from "outdent";
|
||||
|
||||
export default function esbuildPluginShimCommonjsObjects() {
|
||||
return {
|
||||
name: "shim-commonjs-objects",
|
||||
setup(build) {
|
||||
const { onEnd, initialOptions: esbuildOptions } = build;
|
||||
|
||||
onEnd(() => {
|
||||
const file = esbuildOptions.outfile;
|
||||
|
||||
if (!fs.existsSync(file)) {
|
||||
throw new Error(`${file} not exists`);
|
||||
}
|
||||
|
||||
const text = fs.readFileSync(file, "utf8");
|
||||
|
||||
// Use `__prettier` prefix to avoid possible conflicts
|
||||
fs.writeFileSync(
|
||||
file,
|
||||
outdent`
|
||||
import { createRequire as __prettierCreateRequire } from "module";
|
||||
import { fileURLToPath as __prettierFileUrlToPath } from "url";
|
||||
import { dirname as __prettierDirname } from "path";
|
||||
const require = __prettierCreateRequire(import.meta.url);
|
||||
const __filename = __prettierFileUrlToPath(import.meta.url);
|
||||
const __dirname = __prettierDirname(__filename);
|
||||
|
||||
${text}
|
||||
`
|
||||
);
|
||||
});
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user