一、node_global是空的
在Node.js环境下,我们打开控制台并输入全局对象global,我们会发现node_global是一个空对象。这是因为在Node.js中,全局变量和函数都被绑定在global上,node_global只是global的子属性之一。
> console.log(global.node_global) undefined
当我们想要定义一个全局变量或者函数时,只需要将其绑定在global对象上就好了。下面是一个示例:
global.myName = 'Alice'; console.log(myName); // Alice
这里我们定义了一个全局变量myName,并赋值为'Alice'。在任何模块中,只要调用global.myName,即可访问到它。
二、node_global下没有目录
在Node.js文档中,我们可以看到一些与node_global相关的API,比如setImmediate、clearImmediate等。虽然它们都是全局函数,但是它们并没有被放在node_global下面的某个目录里。
这是因为在Node.js中,全局函数的实现原理并不是在node_global下创建一个目录,而是将它们绑定在global上。下面是一个示例:
console.log(global.setTimeout === setTimeout) // true console.log(global.setInterval === setInterval) // true
从上面的代码可以看出,setTimeout和setInterval函数都被绑定在global上,而不是node_global下的某个目录里。
三、node_global访问不到
node_global虽然是Node.js的一个全局对象,但是在模块内并不能直接访问到它。这是为了避免污染全局命名空间,并增加模块的可移植性。
如果我们想要在模块内定义一个全局变量或函数,需要使用global对象。下面是一个示例:
// test.js global.myName = 'Alice'; module.exports = function() { console.log(myName); } // main.js const test = require('./test'); test(); // Alice
在上面的代码中,我们在test.js模块中定义了一个全局变量myName,并将它绑定在global上。在main.js模块中,我们引入test模块,并调用其中定义的函数,输出了myName的值。
四、node_global环境变量选取
在Node.js中,可以通过process对象来获取当前进程的一些信息,比如环境变量。
Node.js中有三种方式来设置环境变量:
- 在命令行中设置
- 在代码中设置
- 在文件中设置
NODE_ENV=production node app.js
process.env.NODE_ENV = 'production';
# .env文件 NODE_ENV=production
无论哪种方式设置环境变量,它们都可以通过process.env对象访问到。下面是一个示例:
// app.js console.log(process.env.NODE_ENV); // 命令行中运行 NODE_ENV=production node app.js
当我们运行上面的代码时,控制台会输出'production',说明我们成功地获取到了环境变量。
五、node_global模块
除了Node.js自带的全局变量和函数之外,我们还可以自己创建模块,并将它们绑定在node_global上。
下面是一个示例:
// myModule.js global.myModule = { hello() { console.log('Hello world'); } } // main.js console.log(myModule); // { hello: [Function: hello] } myModule.hello(); // Hello world
我们在myModule.js模块中定义了一个全局变量myModule,并绑定了一个hello函数。在main.js模块中,我们可以访问到myModule对象,并调用hello函数。
总结
Node_global是Node.js提供的一个全局对象,可以方便地在不同的模块中定义全局变量和函数。同时,我们也可以通过process.env对象来访问环境变量。尽管node_global被放在全局命名空间中,但是在模块内并不能直接访问到它,需要使用global对象。如果我们想要扩展node_global并添加自己的模块,可以将它们绑定在全局对象上。