我正在尝试将rollup
我的图书馆代码放入dist
文件夹中
现在我的内置crypto
库存在问题。
终端输出:
$ yarn run build
...
lib/helpers/security.js
createHmac is not exported by node_modules/rollup-plugin-node-builtins/src/es6/empty.js
...
...
plugins: [
builtins(),
resolve(),
json(),
babel({
exclude: ['node_modules/**','**/*.json']
})
]
...
我的源代码片段:
// 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');
作为参考,github上export
中的相关node/crypto.js
语句显示正在导出createHmac。
似乎从import
删除security.js
行可以解决问题。我知道crypto
是内置节点模块。
我想了解为什么在这种情况下我不应该import
,而文档中的示例导入模块。
答案 0 :(得分:2)
这是我想出的解决方案,对我来说很好用。
在项目中安装rollup-plugin-node-builtins
作为开发依赖项。并将其导入您的rollup.config.js
:
import builtins from 'rollup-plugin-node-builtins'
使用crypto
时将false
设置为builtins()
。它默认为commonjs
的{{1}}版本。那不是我想要或不需要的。
browserify
请确保将// set crypto: false when using builtins()
...
builtins({crypto: false}),
...
添加到您的external
选项:
crypto
现在,使用构建文件时,我可以在图书馆中使用// add `crypto` to the `external` option
// you probably already have
// one or more libs defined in there
let external = ['crypto']
了,而不会出现以前的问题。
crypto
结果是一个大小为4KB的模块,它依赖于几个外部依赖项,而没有将它们包含在生成的文件中。
对于上下文:我的源代码是用ES6编写的,并且我正在构建模块的三个版本:import { createHmac } from "crypto";
,cjs
和umd
。
答案 1 :(得分:0)
我会避免使用服务器端文件,它可以完成,但我不喜欢这样做。 因此,如果使用require()而不是import(导入不是Node.js v8中的内置),则可能没有错误:
var crypto = require("crypto");