在 node 中调用 esbuild 的方法

  1. require("esbuild")
  2. .build({
  3. entryPoints: ["index.jsx"],
  4. bundle: true,
  5. outdir: "dist",
  6. loader: {
  7. ".png": "dataurl",
  8. },
  9. })
  10. .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) => {

    1. console.log(args);
    2. return {
    3. path: args.path,
    4. namespace: "txt",
    5. };

    }); // 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)); ```