如何处理rollup.js中节点的循环依赖

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

使用来自yarn的工作区切换到npm后,由于节点库中的循环依赖,我无法使rollup工作。在切换到 npm 并将节点升级到 16 之前工作正常(从 12 - 也尝试过节点 14)。

这是一个简单的cli工具,package.json中有以下依赖项:

{
  "devDependencies": {
    "@rollup/plugin-commonjs": "22.0.1",
    "@rollup/plugin-node-resolve": "13.3.0",
    "@rollup/plugin-typescript": "8.3.3",
    "@types/node": "^16.11.9",
    "rollup": "2.77.0",
    "rollup-plugin-node-externals": "4.1.1",
    "tslib": "2.4.0",
    "typescript": "4.7.4",
    "watch": "1.0.2"
  },
  "dependencies": {
    "commander": "9.4.0",
    "execa": "^6.1.0"
  }
}

rollup.config.js 是:

import typescript from '@rollup/plugin-typescript';
import commonjs from '@rollup/plugin-commonjs';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import externals from 'rollup-plugin-node-externals';

export default {
  input: 'src/csa.ts',
  output: {
    dir: 'build',
    format: 'cjs',
    strict: false,
    banner: '#! /usr/bin/env node\n',
  },
  plugins: [typescript(), commonjs({ transformMixedEsModules: true }), nodeResolve({ preferBuiltins: true }), externals()],
};

构建期间的结果是:

src/csa.ts → build...
(!) Circular dependencies
../../node_modules/util/util.js -> ../../node_modules/util/node_modules/inherits/inherits.js -> ../../node_modules/util/util.js
../../node_modules/assert/node_modules/util/util.js -> ../../node_modules/assert/node_modules/inherits/inherits.js -> ../../node_modules/assert/node_modules/util/util.js
created build in 3.6s

并且创建的 .js 文件在尝试评估循环引用的函数时将不会运行:

/Users/me/apps/hrh/csa/packages/cli/build/csa.js:6795
    util.inherits(assert.AssertionError, Error);
         ^

TypeError: util.inherits is not a function
    at requireAssert (/Users/me/apps/hrh/csa/packages/cli/build/csa.js:6795:7)
    at Object.<anonymous> (/Users/me/apps/hrh/csa/packages/cli/build/csa.js:7231:16)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47
rollupjs
1个回答
2
投票

通过将 typescript() 移动到插件数组的末尾来解决

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