汇总 js 以包含 NodeJS 核心库

问题描述 投票:0回答:2

我正在将某些内容部署到 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: []
      }
    )
  }
];

javascript node.js rollupjs akamai
2个回答
1
投票

crypto
模块依赖于 Node.js 或浏览器环境,因为它通过包装底层平台 API 来提供实现。 Akamai EdgeWorkers 尚未提供本机加密功能,因此您需要使用提供纯 JS 实现的 JS 库。

只要您仔细观察 CPU 限制,我就成功使用了

crypto-es
(https://www.npmjs.com/package/crypto-es)。


0
投票

就 Josh 的观点而言,我认为 Akamai Edgeworkers 现在拥有自己的本机加密模块:https://techdocs.akamai.com/edgeworkers/docs/crypto

从本质上讲,无论你当时尝试的是什么,现在都有可能实现

所以我假设任何捆绑并使用

crypto
的 npm 软件包,那么它将使用 Akamai 的
crypto
捆绑包

© www.soinside.com 2019 - 2024. All rights reserved.