我正在将某些内容部署到 akamai Edgeworker 上,因此正在使用节点包汇总。我拥有的一个软件包使用
require('crypto')
这给我带来了问题,因为我似乎无法让汇总包含代码。我能够解决并得到它,所以我没有在顶部导入,但现在得到了TypeError: crypto.randomFillSync is not a function
。只是想知道如何将需要加密的东西部署到边缘工作人员上。
我当前的 rollup.config 文件是:
banner.js
var window = {};
var TextDecoder = function() {};
var setTimeout = function(callback) { callback(); };
rollup.config.js
import * as fs from "fs";
import resolve from "@rollup/plugin-node-resolve";
import json from "@rollup/plugin-json";
import commonjs from "@rollup/plugin-commonjs";
import nodePolyfills from 'rollup-plugin-node-polyfills';
import { babel } from '@rollup/plugin-babel';
const BANNER = fs.readFileSync("./src/banner.js").toString();
function getPlugins(babelConfig) {
return [
// Convert CommonJS modules to ES6
commonjs(),
nodePolyfills(),
// Resolve modules from node_modules
resolve({
// use the "browser" property in package.json
browser: true,
preferBuiltins: false
}),
babel(babelConfig),
// Package json data as an ES6 module
json()
];
}
export default [
{
input: "src/index.js",
output: {
banner: BANNER,
name: "main",
file: "dist/main.js",
format: "esm",
sourcemap: false
},
external: ['cookies', 'http-request', 'log', 'create-response'],
plugins: getPlugins(
{
inputSourceMap: true,
sourceMaps: true,
exclude: ["node_modules/**", /\/core-js\//],
presets: [
[
"@babel/preset-env",
{
useBuiltIns: "usage",
corejs: 3,
modules: false,
targets: {
browsers: [
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Safari versions"
]
}
}
]
],
plugins: []
}
)
}
];
crypto
模块依赖于 Node.js 或浏览器环境,因为它通过包装底层平台 API 来提供实现。 Akamai EdgeWorkers 尚未提供本机加密功能,因此您需要使用提供纯 JS 实现的 JS 库。
只要您仔细观察 CPU 限制,我就成功使用了
crypto-es
(https://www.npmjs.com/package/crypto-es)。
就 Josh 的观点而言,我认为 Akamai Edgeworkers 现在拥有自己的本机加密模块:https://techdocs.akamai.com/edgeworkers/docs/crypto
从本质上讲,无论你当时尝试的是什么,现在都有可能实现
所以我假设任何捆绑并使用
crypto
的 npm 软件包,那么它将使用 Akamai 的 crypto
捆绑包