Javascript 如何在节点中不重复地使用require和module.exports?

Javascript 如何在节点中不重复地使用require和module.exports?,javascript,node.js,Javascript,Node.js,我在节点中创建了一个名为chart.js的类文件,它依赖于moment.js和一系列其他外部依赖项: var moment = require('moment'); ... var Chart = { doSomething: function() { } ... }; module.exports = Chart; 现在我想在我的index.js文件中使用这个chart.js模块,所以我将其导入如下: var chart = require('chart'); chart.doSo

我在节点中创建了一个名为
chart.js
的类文件,它依赖于
moment.js
和一系列其他外部依赖项:

var moment = require('moment');
...
var Chart = {
  doSomething: function() { 
  } ...
};
module.exports = Chart;
现在我想在我的
index.js
文件中使用这个
chart.js
模块,所以我将其导入如下:

var chart = require('chart');
chart.doSomething();
但这给了我导入错误:

ReferenceError: moment is not defined
我是否也需要在
index.js
的顶部重新包含所有
require('moment')
语句


当然,我应该能够在不修改索引文件的情况下更改图表文件的要求?

不,您不需要在每个文件中指定
require('moment')
。确保正确安装了moment JS库,并且该库位于您的
node\u modules
目录中

对于使用npm安装的节点模块,您可以使用
require('moduleName')
要求它们,因此
require('moment')
就可以了。但是对于您自己的模块,您必须指定相对路径和文件名。因此,假设
index.js
chart.js
处于同一级别,在
index.js
中,您将执行
require('./chart.js')


其他注意事项:除非使用类构造函数,否则不要将变量名大写。在您的代码中,您使用的是简单的对象文字,而不是构造函数,因此不需要大写变量名,
Chart

不清楚您试图在何处使用该库-它是否在
doSomething()
函数中?它是否在index.js文件中的某个位置?index.js不应该抛出此错误。你确定chart.js能自己工作吗?你能给你展示doSomething方法吗?