Использование старого модуля Require с накопительным пакетом - PullRequest
0 голосов
/ 21 апреля 2020

Я думал, что общий плагин js позволит вам использовать более старые модули, но я не могу заставить свертку работать с https://www.npmjs.com/package/create-hmac. Это более старый модуль, поэтому, насколько я знаю, мне нужно использовать:

const createHmac = require("create-hmac");

Я не могу использовать импорт. Есть ли способ использовать это с накопительным пакетом, или мне не повезло? Я использую стандартный шаблон свертки Svelte и попробовал использовать namedExports, dynamicRequireTargets, другие настройки Resolve и т. Д. c. Если бы кто-нибудь, кто действительно знает, что такое накопительный пакет, мог бы помочь мне, это было бы очень признательно !!

1 Ответ

2 голосов
/ 21 апреля 2020

Вы можете использовать import на самом деле, для этого @rollup/plugin-commonjs. Это позволяет вам import модулей, которые экспортируются с использованием require.

import createHmac from 'create-hmac'

Но это все, что делает этот модуль. Не достаточно для вас. Свертывание не разрешит node_modules et c. само собой. Это не стандартное разрешение модуля ES, это Node Specified c разрешение. Итак, для этого вам также нужно @rollup/plugin-node-resolve.

Все еще недостаточно. Я попробовал пакет create-hmac. Для этого требуются вещи, которые присутствуют в среде Node, но отсутствуют в браузере (такие как потоки ...). Насколько я знаю, Webpack автоматически заполняет это, но не Rollup. Таким образом, вам также нужен плагин для этого. Я пытался rollup-plugin-node-builtins. Кажется, работает.

Итак, в итоге ваша конфигурация Rollup должна выглядеть примерно так:

import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import builtins from 'rollup-plugin-node-builtins'

export default {
  // ...
  plugins: [
    // polyfills Node builtins in the browser
    builtins(),

    // Node resolution mechanism (node_modules)
    resolve({
      // this tells to use the 'browser' field of the packages you install
      // when they provide it (the package you've linked does)
      browser: true,
    }),

    // to allow import of module using require
    commonjs(),
  ]
}
...