我正在用Node写一个web应用程序。如果我有一些带有init函数的JS文件,我怎么从命令行调用这个函数呢?
当前回答
make-runnable试试。
在db.js中,添加require('make-runnable');直到最后。
现在你可以做:
node db.js init
任何进一步的参数都将以列表或键值对的形式传递给init方法。
其他回答
如果你把db.js转换成一个模块,你可以从db_init.js和:node db_init.js中要求它。
db.js:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.js:
var db = require('./db');
db.method1();
db.method2();
灵感来自https://github.com/DVLP/run-func/blob/master/index.js
我创建了https://github.com/JiangWeixian/esrua
如果文件index.ts
export const welcome = (msg: string) => {
console.log(`hello ${msg}`)
}
你就跑
esrua ./index.ts welcome -p world
将输出hello world
这个有点脏,但很好用:)
我将从脚本中调用main()函数。以前我只是在脚本的末尾调用main。然而,我确实添加了一些其他函数并将它们从脚本中导出(在代码的其他部分使用函数)-但我不想每次在其他脚本中导入其他函数时都执行main()函数。
所以我这样做了, 在我的脚本中,我删除了对main()的调用,而不是在脚本的末尾,我把这个检查:
if (process.argv.includes('main')) {
main();
}
所以当我想在CLI中调用这个函数时:node src/myScript.js main
我做了一个IIFE,就像这样:
(() => init())();
这段代码将立即执行并调用init函数。
2022年更新-如果你已经切换到ES模块,你不能使用require技巧,你需要使用动态导入:
node -e 'import("./db.js").then(dbMod => dbMod.init());'
或者使用——experimental- specification -resolution=节点标志:
node --experimental-specifier-resolution=node -e 'import("./db").then(dbMod => dbMod.init());'