请教一下,关于node的 global对象
发布于 18 天前 作者 Kyoloro 175 次浏览 来自 问答

在express写的项目里,在监听端口前,用global对象将几个常用的库设置为全局,比如bluebird, lodash, debug…


示例代码 index.js

var express = require('express');
var app = express();

require('./global_module');

app.get('/', function (req, res) {
	Promise
		.resolve(['a'])
		.then(function (result) {
			_.forEach(result, function (item) {
				console.log(item);
			});
			res.send('ok');
		})
		.catch(function (err) {
			console.error(err)
		});
});

app.listen(3001);

示例代码global_module.js:

global.Promise = require('bluebird');
global._ = require('lodash');
global.debug = require('debug');

终端运行:

$ node index.js

这样 在写其他模块的时候 就能直接引用 Promise, _ , debug 这几个变量了,不用再去require,书写方便

问题: 请问下 这样 有什么不好么,比如性能啊 什么什么的?

4 回复

关键是没必要,在需要用的地方直接require就可以

Node 里的 global 就相当于chrome 里面的 window,尽量不要用,不然干嘛还要require呢?

至少有这些原因吧.

  • var Promise = require('bluebird'); 这是局部变量, global.Promise方式是全局变量, 你说找个局部变量快还是全局变量快?
  • 可能会有冲突, 假如我就是想用原生的Promise, 你却给我bluebird?
  • 如果不小心在这些全局的变量中挂了对象什么的, 有可能会造成内存泄露

总之不是个好习惯.

回到顶部