使用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
最佳答案
通过将 typescript() 移动到插件数组的末尾来解决
关于rollupjs - 如何处理 rollup.js 中节点的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73057462/