有人知道如何从外部更新module.exports。
我有这样的模块,需要另一个工具Nightwatch
(需要js配置)。我坚持承诺,不知道如何解决这个问题。因为模块加载start_process
未定义。
// local.js
module.exports = {
host: "127.0.0.1",
port: "4444",
start_process: undefined,
server_path: "./node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.53.1.jar",
cli_args: {
"webdriver.chrome.driver": "./node_modules/chromedriver/lib/chromedriver/chromedriver",
"driver.version": "2.24"
}
};
require('tcp-port-used').check(4444).then((inUse) => {
module.exports.start_process = !inUse;
return module.exports;
});
// nightwatch.conf.js
var server = require("./local.js");
console.log(server.start_process);
答案 0 :(得分:1)
刚刚加载模块时,值仍为 undefined
。你要么必须找到一种同步调用tcp-port-used
的方法(这通常是被鄙视但在启动时有些可接受),或者你只是导出了承诺本身:
module.exports = require('tcp-port-used').check(4444).then(inUse => {
return {
host: "127.0.0.1",
port: "4444",
start_process: !inUse,
server_path: "./node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.53.1.jar",
cli_args: {
"webdriver.chrome.driver": "./node_modules/chromedriver/lib/chromedriver/chromedriver",
"driver.version": "2.24"
}
};
});
无论谁想要使用模块中的属性,都必须等待它们可用。
答案 1 :(得分:-1)
当你做
时module.exports.start_process = !inUse;
实际上是在修改调用者模块的导出,而不是具有start_process变量的导出。试试这个:
var foreignmodule = require('tcp-port-used');
foreignmodule.check(4444).then((inUse) => {
foreignmodule.start_process = !inUse;
return module.exports;
});