Node.js:如何使模块可用于多个文件?

时间:2015-09-27 16:18:01

标签: ruby node.js require

在我编写的Ruby程序中,我'需要'在'入口点'文件顶部需要的所有文件和模块。例如:

#Sets an absolute path for wherever the program is run from
#this_file = __FILE__
#BASEDIR = File.expand_path(File.join(this_file, '..'))
this_file = __FILE__
this_file_folder_nav = File.join(this_file, '..')
BASEDIR = File.expand_path(this_file_folder_nav)


#Required Gems
require 'ap'
require 'docx'
require 'sanitize'
etc

#Required files
require_relative "lib/commodity/stories.rb"
require_relative 'lib/worldgrowth/worldgrowth.rb'
require_relative "lib/prices/prices.rb"
require_relative 'lib/prices/prices_module.rb'
etc

I can access all the classes defined in the files above. And I can access classes defined in the 'stories.rb' in pirces_module.rb. All the required gems are accessible in all the files

问题:这是一个好习惯吗?这对我来说似乎很方便,我想在node.js中做同样的事。

但是,我发现我必须在将使用该模块的所有文件上写var module = require('someModule')。如果我有一个node.js应用程序的入口点文件,是否可以做类似于我在Ruby中做的事情?

2 个答案:

答案 0 :(得分:2)

您可以制作一个需要所有其他模块的模块,然后在您需要的任何地方使用它。类似的东西:

var Common = {
  util: require('util'),
  fs:   require('fs'),
  path: require('path')
};

module.exports = Common;

// in other modules
var Common = require('./common.js');

此示例取自this article

答案 1 :(得分:2)

假设您想让核心模块“http”可用于其他文件。在入口点文件中,您可以要求('http')并将该对象附加到global对象。此外,您的入口点文件将需要您可能拥有的其他文件。像这样:

var http = require('http')
global.http = http;

var other = require('./other')

现在,另一个文件可以访问http模块,您可以执行以下操作:

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');