Как создать бандл с esbuild с модулями импорта

у меня есть этот модуль

import * as cborg from 'cborg'
import { CID } from 'multiformats/cid'
function cidEncoder (obj) {

}
....

когда я создаю модуль с этой командной строкой

"bundle": "./node_modules/.bin/esbuild  ./dist/index.mjs  --bundle   --outfile=./dist/out.mjs",

У меня есть пакет без экспорта по умолчанию

когда я создаю модуль с этой командной строкой

"build": "./node_modules/.bin/esbuild  ./src/index.js  --target=es2020   --outfile=./dist/index.mjs",

Этот импорт не включен в модуль

import * as cborg from 'cborg'
import { CID } from 'multiformats/cid'

Как я могу создать модуль, включив все модули в один файл?

🤔 А знаете ли вы, что...
JavaScript поддерживает модульную структуру, что способствует организации кода на больших проектах.


1
82
1

Ответ:

Решено

Похоже, вы не указали platform, поэтому по умолчанию будет браузер, и, согласно esbuild docs, вывод format (который вы также не указали) по умолчанию будет iife:

Когда в качестве платформы выбран браузер (значение по умолчанию):

  • Когда объединение включено, формат вывода по умолчанию устанавливается на iife, который заключает сгенерированный код JavaScript в немедленно вызываемое функциональное выражение, чтобы предотвратить утечку переменных в глобальную область.

Итак, учитывая, что вы пытаетесь сгенерировать модуль ESM (т.е. на основе расширения *.mjs в выходном файле сборки), вам понадобится выходной формат esm, который используется по умолчанию при указании нейтрального platform:

"bundle": "esbuild  ./src/index.js  --bundle --platform=neutral  --outfile=./dist/out.mjs",

Вам также нужно будет добавить экспорт по умолчанию в ваш файл index.js:

import * as cborg from 'cborg'
import { CID } from 'multiformats/cid'

export default function cidEncoder (obj) {
  ...
}

Надеюсь, это поможет.