如何在命令行中运行Node.js ES6 Modules脚本内的指定函数
命令行调用ES Module内指定函数的实现方案
问题原因
直接运行node schedules.js name无输出,是因为Node.js执行脚本时仅运行文件顶层代码,你定义的name函数仅完成导出操作,既没有被主动调用,也没有匹配命令行传入参数的逻辑。
实现步骤
- 第一步:确保你的项目根目录
package.json中已配置"type": "module",否则Node.js会默认将.js文件识别为CommonJS规范,无法识别ES Module的导出语法。如果没有package.json,可在项目目录执行npm init -y生成后添加对应配置。 - 第二步:修改
schedules.js文件,添加命令行参数解析与函数匹配调用逻辑,参考代码如下:
// 统一定义所有可对外暴露的函数 const availableFunctions = { name(params) { console.log('Hello World'); } } // 导出函数供其他文件导入使用 export const { name } = availableFunctions; // 判断当前文件是否为直接执行的入口文件 if (import.meta.url === `file://${process.argv[1]}`) { // 取命令行传入的第三个参数作为要调用的函数名 const targetFnName = process.argv[2]; // 取后续所有参数作为函数入参 const fnParams = process.argv.slice(3); if (Reflect.has(availableFunctions, targetFnName) && typeof availableFunctions[targetFnName] === 'function') { availableFunctions[targetFnName](...fnParams); } else { console.error(`未找到名为 ${targetFnName} 的可调用函数`); } }
验证效果
修改完成后执行命令node schedules.js name,即可正常输出Hello World。如果需要给函数传参,直接跟在函数名后即可,例如node schedules.js name param1 param2,参数会自动透传给目标函数。
内容的提问来源于stack exchange,提问作者Breno
相关产品推荐
相关产品推荐

