javascript - 当“捆绑”关闭时,esbuild 不捆绑内部文件导入
问题描述
考虑这个非常做作的 npm 包:
import clone from "lodash.clonedeep";
import calculate from "./utils/calculate"; // ".ts" omitted
function x(obj:any):number {
return calculate(clone(obj).a, clone(obj).b);
}
export { x }
想象一下,我们想要一个这样的esm
构建。
- 如果我们设置
esbuild
为“bundle”,外部clone
和内部calculate
导入都将在生成的文件中结束。(这很酷,我想要它来iife
构建)。 - 如果我们设置
esbuild
不“捆绑”,外部clone
和内部calculate
都不会最终出现在生成的文件中。(这不酷,我还想calculate
捆绑)。
在 Rollup 中,这种意义上的“捆绑”仅适用于外部导入;默认情况下,internal-ones 都放在一个文件中。
您知道如何设置esbuild
为仅包含内部文件导入吗?要得到:
import clone from "lodash.clonedeep";
function calculate(a, b) {
return a * b;
}
function x(obj){
return calculate(clone(obj).a, clone(obj).b);
}
export { x }
我只是想制作一些esm
/ cjs
npm 包构建。
SO中的其他问题是不同的:这个问题是将多个文件连接成一个。在这里,我们只是试图复制 Rollup 的行为,包括本地导入但不包括外部导入,就像在普通的 npm 包中一样。谢谢你。
解决方案
答案是,就像在 Rollup 中一样——启用“捆绑”,但通过设置external跳过捆绑外部依赖项。这样,本地导入将不会被捆绑,因为它们不在 package.json 中。
const path = require("path");
const pkg = require(path.resolve("./package.json"));
const external = [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
];
// ESM
require('esbuild').buildSync({
entryPoints: ['src/main.ts'],
format: 'esm',
bundle: true,
minify: false,
sourcemap: false,
target: ['esnext'],
outfile: 'dist/yourProgram.esm.js',
external,
});
推荐阅读
- javascript - ANT 是否支持地图(Javascript)?
- php - 在 PHP Codeigniter 中检索一个月的 1 到 31 之间的 num 行数据
- powerbi - 单击表格可视 Power BI 上的单元格后向下钻取
- php - php, $sql 在使用 $result 之前返回空的 $rows
- javascript - reactjs中表格中的可编辑字段
- angular - 如何在角度上的拦截器上传递查询?
- eclipse - Eclipse 对 Maven 依赖项并没有真正的帮助
- proto - 如何在 webbots 中编辑 PUMA560 原型文件
- java - 错误 :: “错误创建具有名称的 bean” 在 Spring
- oauth - 如何使用邮递员的oauth访问令牌调用jira服务器rest api。?