将旧版 Require 模块与 Rollup 一起使用

Alt*_*nge 1 hmac rollupjs svelte

我认为 commonjs 插件可以让您使用较旧的模块,但我无法让 rollup 与https://www.npmjs.com/package/create-hmac一起使用。这是一个较旧的模块,据我所知我需要使用:

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

我无法使用导入。有什么方法可以将其与汇总一起使用,还是我运气不好?我正在使用标准的 Svelte rollup 模板,并尝试使用namedExports、dynamicRequireTargets、不同的 Resolve 设置等。如果任何真正了解 rollup 的人可以帮助我,我将不胜感激!

rix*_*ixo 5

你可以import实际使用,这就是@rollup/plugin-commonjs目的。它允许您import使用 导出模块require

import createHmac from 'create-hmac'
Run Code Online (Sandbox Code Playgroud)

但这就是这个模块的全部作用。对你来说还不够。node_modulesRollup本身不会解决等问题。这不是标准的 ES 模块分辨率,而是 Node 特定的分辨率。因此,为此,您还需要@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(),
  ]
}
Run Code Online (Sandbox Code Playgroud)