Сначала я получал предупреждение о криптографии внешних зависимостей
Это потому, что Rollup не знает, хотите ли вы использовать встроенный в узел crypto
или внешний пакет , @rollup/plugin-node-resolve
preferBuiltins
используется для выбора одного из этих вариантов.
Итак, я добавил external и output.globals в свою конфигурацию накопительного пакета
Эти параметры вместе с preferBuiltins: true
предписывает Rollup использовать встроенный узел crypto
без его связывания (следовательно, оператор импорта все еще присутствует в выходном файле).
Однако, если вашей целевой средой является браузер, вам следует используйте альтернативу браузера , предоставляемую uuid
, которая использует Web Crypto API вместо crypto
узла. Для этого должно быть достаточно следующей конфигурации Rollup:
// rollup.config.js
export default [{
input: ...,
output: {
file: ...,
format: 'esm',
},
plugins: [
resolve({
browser: true, // This instructs the plugin to use
// the "browser" property in package.json
}),
commonjs(),
],
}];
Просто из любопытства:
Мой вопрос, будет ли это работать, если я добавлю output.esm . js в браузере?
<script type="module" src="/path/to/output.esm.js"></script>
Нет, не будет; главным образом потому, что браузеры не понимают спецификации пустых модулей (import crypto from 'crypto'
вместо './path/to/crypto.js'
). Кроме того, согласно вашей конфигурации Rollup crypto
рассматривается как встроенный nodejs, который недоступен в браузере, если не входит в комплект:)