使用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解析器抛出语法错误。
解决方案
方法一:直接修改依赖并生成持久补丁
- 定位报错的两个文件:
node_modules/flutterwave-node-v3/services/banks/rave.banks-branches.jsnode_modules/flutterwave-node-v3/services/beneficiaries/rave.create.js
- 将文件中的
const package = require('../../package.json')替换为非保留关键字的变量名,例如:const pkg = require('../../package.json') - 同步替换文件中所有引用该变量的地方(比如
package.version改为pkg.version) - 安装
patch-package工具保存修改,避免后续npm install丢失修改:
执行后会在项目根目录生成npm install patch-package --save-dev npx patch-package flutterwave-node-v3patches/flutterwave-node-v3+<版本号>.patch文件,后续安装依赖时会自动应用该补丁。
方法二:通过Rollup插件在构建时动态替换变量
- 安装
@rollup/plugin-replace插件:npm install @rollup/plugin-replace --save-dev - 修改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(\/.*)?$/, ], } - 重新运行Rollup构建即可解决语法错误。
内容的提问来源于stack exchange,提问作者elias
相关产品推荐
相关产品推荐

