在 node 中调用 esbuild 的方法
require("esbuild")
.build({
entryPoints: ["index.jsx"],
bundle: true,
outdir: "dist",
loader: {
".png": "dataurl",
},
})
.catch(() => process.exit(1));
插件开发
解析 txt 文件 ```javascript let exampleOnLoadPlugin = { name: “example”, setup(build) { let fs = require(“fs”); // 获取 esbuild 配置,可以对配置进行修改 console.log(build.initialOptions); // build.initialOptions.outdir = “lib”; // setup 这里会立即修改配置,其他地方不会修改
// 告诉 esbuild 对于某一类型的文件应该如何处理他 build.onResolve({ filter: /.txt$/ }, async (args) => {
console.log(args);
return {
path: args.path,
namespace: "txt",
};
}); // Load “.txt” files and return an array of words // filter 查找要执行的文件,推荐使用正则,会去 go 语言中执行,提高性能 // filter: /.txt$/ // 如果 onResolve 中做了 namespace,就可以通过 namespace 来过滤需要处理的文件 build.onLoad({ filter: /.*/, namespace: “txt” }, async (args) => {
let text = await fs.promises.readFile(args.path, "utf8"); console.log(text); return { // contents 对文件内容的预处理 // 不推荐在 onLoad 中做太重的处理,因为会导致编译变慢,比如 babel // contents: `export default ${JSON.stringify(text.split(/\s+/))}`, contents: JSON.stringify(text.split(/\s+/)), // 加载器, 如果不使用加载器,使用 export default 把文件导出效果是一样的 loader: "json", };
}); }, };
require(“esbuild”) .build({ entryPoints: [“index.jsx”], bundle: true, outdir: “dist”, loader: { “.png”: “dataurl”, }, plugins: [exampleOnLoadPlugin], }) .catch(() => process.exit(1)); ```