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

标签 rollupjs

使用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/

相关文章:

reactjs - 什么是扁平 bundle ?为什么 Rollup 在这方面比 Webpack 更好?

javascript - 模块未在 node_modules/core-js/internals/global.js 中定义

javascript - 如何使用带有 Leaflet 1.1.0 的汇总来创建单个包?

javascript - 如何为 IE11 内联 Rollup/Babel polyfill

javascript - 静态 typescript 类方法树是否可以通过汇总摇动?

javascript - 汇总包无法映射别名导入

configuration - require 没有使用 rollup 定义

javascript - 如何从 ReactJS 生产版本中删除 process.env.NODE_ENV 检查?

angular - 汇总和 Redux : "index.js does not export default"

sass - 使用汇总包在 SCSS 中添加背景图像?