You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rollup构建代码时遇'reserved keyword package'错误求助

解决Rollup构建时flutterwave-node-v3的保留关键字语法错误

问题场景

构建代码时持续抛出以下语法错误:

[!] (plugin commonjs--resolver) SyntaxError: The keyword 'package' is reserved (4:6) in C:\Users\name\Desktop\elias\repo\repo\node_modules\flutterwave-node-v3\services\banks\rave.banks-branches.js
2: const q = require('q');
3: const axios = require('axios');
4: const package = require('../../package.json');
         ^
5:
6: const spec = morx.spec()
SyntaxError: The keyword 'package' is reserved (4:6) in C:\Users\computer name\Desktop\name\name\name\node_modules\flutterwave-node-v3\services\beneficiaries\rave.create.js

当前使用的Rollup配置文件:

const resolve = require("@rollup/plugin-node-resolve")
const commonjs = require("@rollup/plugin-commonjs")
const json = require("@rollup/plugin-json")
const builtins = require("builtin-modules")

module.exports = {
  input: "autotasks/relay/index.js",
  output: {
    file: "build/relay/index.js",
    format: "cjs",
    exports: "auto",
  },
  plugins: [
    resolve({ preferBuiltins: true }),
    commonjs(),
    json({ compact: true }),
  ],
  external: [
    ...builtins,
    "ethers",
    "web3",
    "axios",
    /^defender-relay-client(\/.*)?$/,
  ],
} 

问题原因

package是JavaScript的保留关键字,不能用作变量名,但归档状态的依赖包flutterwave-node-v3在两个文件中违规使用了const package = require('../../package.json'),导致Rollup的CommonJS解析器抛出语法错误。

解决方案

方法一:直接修改依赖并生成持久补丁

  1. 定位报错的两个文件:
    • node_modules/flutterwave-node-v3/services/banks/rave.banks-branches.js
    • node_modules/flutterwave-node-v3/services/beneficiaries/rave.create.js
  2. 将文件中的const package = require('../../package.json')替换为非保留关键字的变量名,例如:
    const pkg = require('../../package.json')
    
  3. 同步替换文件中所有引用该变量的地方(比如package.version改为pkg.version)
  4. 安装patch-package工具保存修改,避免后续npm install丢失修改:
    npm install patch-package --save-dev
    npx patch-package flutterwave-node-v3
    
    执行后会在项目根目录生成patches/flutterwave-node-v3+<版本号>.patch文件,后续安装依赖时会自动应用该补丁。

方法二:通过Rollup插件在构建时动态替换变量

  1. 安装@rollup/plugin-replace插件:
    npm install @rollup/plugin-replace --save-dev
    
  2. 修改Rollup配置文件,添加插件并配置替换规则:
    const resolve = require("@rollup/plugin-node-resolve")
    const commonjs = require("@rollup/plugin-commonjs")
    const json = require("@rollup/plugin-json")
    const builtins = require("builtin-modules")
    const replace = require("@rollup/plugin-replace")
    
    module.exports = {
      input: "autotasks/relay/index.js",
      output: {
        file: "build/relay/index.js",
        format: "cjs",
        exports: "auto",
      },
      plugins: [
        resolve({ preferBuiltins: true }),
        replace({
          preventAssignment: true,
          'const package = require': 'const pkg = require',
          'package.': 'pkg.',
        }),
        commonjs(),
        json({ compact: true }),
      ],
      external: [
        ...builtins,
        "ethers",
        "web3",
        "axios",
        /^defender-relay-client(\/.*)?$/,
      ],
    }
    
  3. 重新运行Rollup构建即可解决语法错误。

内容的提问来源于stack exchange,提问作者elias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:50:33