var count = 1;
// psuedocode
// if (words typed begins with @add)
require('./add.js');
// if (words typed begins with @remove)
require('./remove.js');
// if (words typed begins with @total)
require('./total.js');
module.exports.count = count;
var count = require('./main.js').count;
console.log(count);
var count = require('./main.js').count;
count += 10;
console.log(count);
var count = require('./main.js').count;
count -= 10;
console.log(count);
1
11
-9
我有一个应用程序(IRC机器人),我想添加一个功能,偷看可以做@add 1或1 @Remove我有一个main.js那则需要具体取决于该触发器不同的文件。因此,添加将触发add.js文件,然后将要求(“main.js”),并添加10(10为简化起见,它实际上会解析数,并使用该号码)给它。我遇到的问题是,当有人去了解和做@Remove。它要求(“main.js”)和从1导致-9减去10。和做@total将输出1。
我已经做了module.exports一个相当不错的搜索,我还没碰到过像我上面列出的例子。 The docs不包括接近我想要做什么任何的例子;而这些问题1,2我理解 - 但任何用处我不是 - 我的理解什么正在那里说。
我想有两个@add和@Remove操纵相同的变量(计数),以及@total的总数与考虑到@add和@removes返回。我使用module.exports不正确;或者是有没有变量共享一个共同的方式,用一个文件能够修改module.exports的内容和结果返回到main.js文件?
你的问题是,当你做var count = require('./main.js').count;
,你得到这个数字,而不是引用的副本。更改count
不会更改“源”。
但是,你应该有文件导出功能。需要文件将只运行它的第一次,但之后它的缓存,并且不会重新运行。 see docs
建议1:
// main.js
var count = 1;
var add = require('./add.js');
count = add(count);
// add.js
module.exports = function add(count) {
return count+10;
}
#2:
var count = 1;
var add = function() {
count += 10;
}
add();
#3:我个人创建计数器模块(这是一个实例,但你可以很容易地使之成为“类”):
// main.js
var counter = require('./counter.js');
counter.add();
console.log(counter.count);
// counter.js
var Counter = module.exports = {
count: 1,
add: function() {
Counter.count += 10;
},
remove: function() {
Counter.count += 10;
}
}
不知道这新的或没有,但你可以将文件本身之间的确共享变量:
main.js
exports.main = {
facebook: null
};
counter.js
var jamie = require('./main');
console.info(jamie); //{facebook: null}
jamie.main.facebook = false;
console.info(jamie); //{facebook: false}
anothercheck.js
var jamie = require('./main');
console.info(jamie); //{facebook: null} //values aren't updated when importing from the same file.
jamie.main.facebook = true;
console.info(jamie); //{facebook: true}
现在,您可以将文件之间共享。
我有一个像你一样的问题,。有时我想多个文件之间共享变量,因为我爱模块化风格如。在我的Node.js脚本在不同的文件夹/文件分离器,功能,型号,所以我可以很容易地管理代码。
我不知道这是不是最好的解决办法,但我希望能满足您的需求。
车型/ data.js
// exports empty array
module.exports = [];
控制器/ somecontroller.js
var myVar = require('../models/data');
myVar.push({name: 'Alex', age: 20});
console.log(myVar);
// [{ name: 'Alex', age: 20 }]
控制器/ anotherController.js
var myVar = require('../models/data');
console.log(myVar);
// This array has value set from somecontroller.js before...
// [{ name: 'Alex', age: 20 }]
// Put new value to array
myVar.push({name: 'John', age: 17});
console.log(myVar);
// Value will be added to an array
// [{ name: 'Alex', age: 20 }, { name: 'John', age: 17}]
有没有办法可以分享不同的文件之间的引用。你不应该。
我有一个main.js那则需要视不同的触发器文件被称
我不认为这是一个好主意。所有这些都需要你永远需要必须在文件的顶部声明。
我也看到你在main.js
total.js
和total.js
需要main.js
。该require()
功能导入该文件的module.exports
并将其分配给您提供的命名空间。您的代码不应该被拆分后的文件这种方式。您提取代码到单独的文件,只有当他们自己是模块。如果你这样做,你就不会被导入对方2个文件。
这也很好地注意到,在JavaScript中,当你将东西命名空间,它被复制(克隆),如果它是一个原始的。如果它是一个对象,无论是命名空间则是指同一个对象
var num = 5;
var prim = num;
prim++; // prim is 6, but num is still 5.
var num = {five:5};
var ob = num;
ob.five = 6;
console.log(num.five) //also 6.
该工程,但不建议小黑客是使用process
变量。您可以将不同的属性给它,基本上使用它们,就像您在基于浏览器的JS的window
对象。这个小技巧将提供对变量的引用。它可以改变和操纵和变化将结转到是require
d的所有文件。
但是千万注意,不推荐,因为重写
process
变量可能有一些意想不到的效果,并受的信息应另一个进程干扰损失。
file1.js:
const s1 = require('./file2');
process.num = 2;
console.log("file1", process.num);
s1.changeNum();
console.log("file1", process.num);
file2.js:
module.exports.changeNum = () => {
process.num = 3;
console.log("file2", process.num);
};
输出:
file1 2
file2 3
file1 3
另外,所有其他的答案
吸气和setter方法
var _variableThing = 1223
module.exports = {
get variableThing(){
return _variableThing
},
set variableThing(val){
_variableThing = val
}
}
不会直接进口的工作,虽然