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 }
Представьте, что мы хотим построить это.
- Если мы установим "bundle", как внешний, так и внутренний импорт завершатся в сгенерированном файле. (Это круто, я хочу это для
iife
строить). - Если мы не устанавливаем "связать", ни внешние
clone
ни внутренние, ни внутренние не попадут в сгенерированный файл. (Это не круто, я хочуcalculate
в комплекте еще).
В Rollup «объединение» в этом смысле относится только к внешнему импорту; внутренние-единицы по умолчанию помещаются в один файл.
Вы знаете, как установить
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. Спасибо.
1 ответ
Ответ такой же, как и в 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,
});