Node.js crypto.createHmac在汇总后未定义

Node.js crypto.createHmac在汇总后未定义,node.js,ecmascript-6,rollupjs,Node.js,Ecmascript 6,Rollupjs,我正试图将库中的代码汇总到dist文件夹中。 现在我对内置的crypto库有一个问题 终端输出: $ yarn run build ... lib/helpers/security.js createHmac is not exported by node_modules/rollup-plugin-node-builtins/src/es6/empty.js ... 汇总配置 源代码 我的源代码中的一个片段: // lib/helpers/security.js import

我正试图
将库中的代码汇总到
dist
文件夹中。
现在我对内置的
crypto
库有一个问题

终端输出:

$ yarn run build
  ...
  lib/helpers/security.js
  createHmac is not exported by node_modules/rollup-plugin-node-builtins/src/es6/empty.js
  ...
汇总配置 源代码 我的源代码中的一个片段:

// lib/helpers/security.js
import * as crypto from 'crypto'
crypto.createHmac('sha256',nonce).update(text).digest('base64');
结果 从汇总、捆绑的
js
输出:

undefined('sha256', nonce).update(text).digest('base64');
Crypto.js源代码 作为参考,github上的
node/crypto.js
中的相关
export
语句显示createHmac正在导出

更新1(解决方案?) 从
security.js
中删除
import
行似乎可以解决这个问题。我知道
crypto
是一个内置的节点模块


我想了解为什么在这种情况下我不应该导入
,而文档中的示例确实导入了模块。

我会避免使用babel服务器端文件,这是可以做到的,但我宁愿不这样做。 因此,如果使用require()而不是import(import不是Node.js v8中内置的),则可能不会出现错误:


这就是我提出的解决方案,对我来说很好

作为开发人员依赖项安装到项目中。并将其导入您的
rollup.config.js

import builtins from 'rollup-plugin-node-builtins'
使用
builtins()时,将
crypto
设置为
false
。它默认为
browserify
中的
commonjs
版本。这不是我想要或需要的

// set crypto: false when using builtins()
...
builtins({crypto: false}),
...
确保在选项中添加
crypto

现在,我可以在我的库中使用
crypto
,而不会出现以前使用构建文件时出现的问题

import { createHmac } from "crypto";
结果是一个大小为4KB的模块,它依赖于几个外部依赖项,而没有将它们包含在构建文件中

import { createHmac } from "crypto";
上下文:我的源代码是用ES6编写的,我正在构建三个版本的模块:
cjs
umd
es

// add `crypto` to the `external` option
// you probably already have 
// one or more libs defined in there
let external = ['crypto']
import { createHmac } from "crypto";