esbuild 不捆绑文件
esbuild not bundling files
我正在尝试使用 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));
我已将 bundle 设置为 true,但它仍然要求我使用 outdir,它只是 returns 那些给我的文件,最小化。他们基本上有 0 个关于此的文档,每个 post 在线关于它的文档只有 copy/pasted 来自 GitHub 的自述文件。我怎样才能捆绑它?
每个入口点文件将成为一个单独的包。每个包都包含入口点文件及其导入的所有文件。通过两个入口点将创建两个单独的包。捆绑过程与文件串联不同。
如果您想要将所有文件放在一个包中,您可以从一个文件中引用所有文件并将该文件用作入口点:
import "./file1.js"
import "./file2.js"
使用 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));
您可以使用 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);
根据 Alexander 的回复,我终于找到了将整个文件夹打包成单个文件的解决方案:
const esbuild = require('esbuild');
const glob = require('glob');
esbuild
.build({
stdin: { contents: '' },
inject: glob.sync('src/js/**/*.js'),
bundle: true,
sourcemap: true,
minify: true,
outfile: 'web/js/bundle.js',
})
.then(() => console.log("⚡ Javascript build complete! ⚡"))
.catch(() => process.exit(1))
我正在尝试使用 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));
我已将 bundle 设置为 true,但它仍然要求我使用 outdir,它只是 returns 那些给我的文件,最小化。他们基本上有 0 个关于此的文档,每个 post 在线关于它的文档只有 copy/pasted 来自 GitHub 的自述文件。我怎样才能捆绑它?
每个入口点文件将成为一个单独的包。每个包都包含入口点文件及其导入的所有文件。通过两个入口点将创建两个单独的包。捆绑过程与文件串联不同。
如果您想要将所有文件放在一个包中,您可以从一个文件中引用所有文件并将该文件用作入口点:
import "./file1.js"
import "./file2.js"
使用 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));
您可以使用 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);
根据 Alexander 的回复,我终于找到了将整个文件夹打包成单个文件的解决方案:
const esbuild = require('esbuild');
const glob = require('glob');
esbuild
.build({
stdin: { contents: '' },
inject: glob.sync('src/js/**/*.js'),
bundle: true,
sourcemap: true,
minify: true,
outfile: 'web/js/bundle.js',
})
.then(() => console.log("⚡ Javascript build complete! ⚡"))
.catch(() => process.exit(1))