在我编写的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中做的事情?
答案 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/');