esbuild 不捆绑文件

Lee*_*gan 9 javascript bundling-and-minification esbuild

我正在尝试使用 esbuild 在 npm 项目中捆绑和缩小我的文件。它正在最小化我传入的每个文件,但它不是捆绑。它给了我一个错误,当有多个文件时,我必须使用“outdir”。但是,这使我将所有这些文件返回到一个文件夹中,并将其最小化。这不是我想要的行为,也不是捆绑。我只是想让它把所有这些文件合并成一个。

let {build} = require("esbuild");
let files = ["file1.js", "file2.js"];

build({
    entryPoints: files,
    outdir: "./views/dashboardPage/bundle",
    minify: true,
    bundle: true
}).catch(() => process.exit(1));
Run Code Online (Sandbox Code Playgroud)

我将 bundle 设置为 true,但它仍然要求我使用 outdir,它只是将这些文件返回给我,并最小化。他们基本上有 0 个关于此的文档,并且关于它的每个在线帖子都只是从 GitHub 复制/粘贴了自述文件。我怎样才能让它捆绑?

小智 6

每个入口点文件将成为一个单独的包。每个包包括入口点文件和它导入的所有文件。传递两个入口点将创建两个单独的包。捆绑过程与文件连接不同。

如果您希望将所有文件放在一个包中,您可以从一个文件中引用所有文件,并使用该文件作为入口点:

import "./file1.js"
import "./file2.js"
Run Code Online (Sandbox Code Playgroud)

使用 esbuild 执行此操作可能如下所示:

let {build} = require("esbuild");
let files = ["./file1.js", "./file2.js"];

build({
    stdin: { contents: files.map(f => `import "${f}"`).join('\n') },
    outfile: "./views/dashboardPage/bundle.js",
    minify: true,
    bundle: true
}).catch(() => process.exit(1));
Run Code Online (Sandbox Code Playgroud)

  • 如何从命令行执行此操作而不创建临时文件以便将其提供给 ebuild.exe (2认同)

txi*_*man 6

根据亚历山大的回应,我终于找到了这个解决方案,将整个文件夹打包到一个文件中:

\n
const esbuild = require(\'esbuild\');\nconst glob = require(\'glob\');\n\nesbuild\n    .build({\n        stdin: { contents: \'\' },\n        inject: glob.sync(\'src/js/**/*.js\'),\n        bundle: true,\n        sourcemap: true,\n        minify: true,\n        outfile: \'web/js/bundle.js\',\n    })\n    .then(() => console.log("\xe2\x9a\xa1 Javascript build complete! \xe2\x9a\xa1"))\n    .catch(() => process.exit(1))\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

您可以使用inject选项(https://esbuild.github.io/api/#inject),例如,

const options = {
  entryPoints: ['index.js'],
  inject: ['file1.js', ..., 'fileN.js'],
  bundle: true,
  minify: true,
  sourcemap: true,
  outdir: path,
};
esbuild.buildSync(options);
Run Code Online (Sandbox Code Playgroud)