javascript esbuild不绑定文件

5uzkadbs  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(125)

我正在尝试使用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,并且它只是把这些文件最小化返回给我。他们基本上没有关于这个的文档,并且每个关于它的在线帖子都只是从GitHub复制/粘贴了自述文件。我怎么才能把它绑定起来呢?

pdtvr36n

pdtvr36n1#

每个入口点文件都将成为一个单独的捆绑包。每个捆绑包都包括入口点文件及其导入的所有文件。传递两个入口点将创建两个单独的捆绑包。捆绑过程与文件串联不同。
如果希望所有文件都包含在一个包中,可以从一个文件引用所有文件,并将该文件用作入口点:

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));
2skhul33

2skhul332#

您可以使用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);
64jmpszr

64jmpszr3#

根据 Alexandria 的React,我终于来到这个解决方案,将整个文件夹打包成一个单一的文件:

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

b1payxdu4#

问题是因为找不到文件。

安装此程序包以获取文件夹中的所有文件:

npm i files-folder

您的***esbuild.config.js***文件将如下所示:

import { filesFromFolder } from 'files-folder'
import esbuild from 'esbuild'

esbuild
    .build({
        entryPoints: filesFromFolder('src'),
        bundle: true,
        minify: true,
        sourcemap: true,
        target: 'node16',
        define: { 'require.resolve': undefined },
        platform: 'node',
        allowOverwrite: true,
        outdir: 'views/dashboardPage/bundle'
    })
    .catch((error) => {
        process.exit(1)
    })

相关问题