【问题标题】:Call specific NodeJS function in package.json scripts在 package.json 脚本中调用特定的 NodeJS 函数
【发布时间】:2016-04-11 18:22:16
【问题描述】:

我有一个带有导出功能的 NodeJS 文件,有点像这样:

test.js

exports.run = function(){
  console.log('You run this function!');
};

有没有办法使用package.jsonscripts 对象中的自定义命令专门调用此文件中的函数?

例如,我想它看起来像这样:

{
  "author": "Joe Bloggs",
  "name": "test-app",
  "main": "server.js",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "test": "NODE_ENV=production node test.js run()",
  },
  "dependencies": {
    "express": "~4.10.6",
  }
}

显然这是运行函数的错误语法。

【问题讨论】:

  • 不。你为什么要这样做?您实际上可以将其设为 IIFE 并加载模块。
  • 我想这样做,一旦我的应用程序运行,我可以通过从终端运行函数来调用特定任务,而不是停止应用程序
  • 如果您绝对必须这样做,您可以动态创建一个 JavaScript 模块并使用节点调用它。但这对我来说似乎不是正确的方法
  • 如果我的应用程序已经在运行,并且我想手动调用require('./test.js').run();,那么最好的方法是什么?
  • @Coop 你试过node -e "require('./test.js').run();"

标签: javascript json node.js


【解决方案1】:

您可以使用良好的开关盒并将参数传递给您的脚本。

test.js

function foo(){
  console.log('foo is called');
}

function bar(){
  console.log('bar is called');
}

for (var i=0; i<process.argv.length;i++) {
  switch (process.argv[i]) {
    case 'foo':
      foo();
      break;
    case 'bar':
      bar();
      break;
  }
}

module.exports.foo = foo;
module.exports.bar = bar;

package.json

{
  "author": "A person",
  "name": "test-app",
  "main": "server.js",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "test": "NODE_ENV=production node test.js foo bar"
  },
  "dependencies": {
    "express": "~4.10.6"
  }
}

test.js:foo() 和 test.js:bar() 现在将被 npm test 调用。您也可以像往常一样要求它。
这回答了你的问题,但你后来的 cmets 让我不确定这是否是你所追求的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多