node 获取模块中定义的变量

本文介绍了JavaScript中如何通过模块对象module.exports导出变量,并在其他模块中通过require引入并使用这些变量。

比如两个js文件

1.js

var a = 10

2.js

require('./1')

console.log(a)

2.js引入了1.js ,但是是无法获取1.js里面的变量的。

模块有自己的作用域

解决方法:

使用模块对象。

我们可以直接在1.js 里打印下module

console.log(module)

得到一个对象

Module {
  id: '.',
  exports: {},
  parent: null,
  filename: 'd:\\项目\\node\\object\\1.js',
  loaded: false,
  children: [],
  paths: 
   [ 'd:\\项目\\node\\object\\node_modules',
     'd:\\项目\\node\\node_modules',
     'd:\\项目\\node_modules',
     'd:\\node_modules' ] }

module模块对象里面有个很重要的exports对象。

我们可以通过exports对象 把一个模块中的局部变量对象进行提供访问(对外暴露)

我们再次改写一下

1.js

var a = 100;
module.exports a = a

将a挂载到exports对象下。

2.js

require('./1')

console.log(a)

在2.js 里面我们加载1.js这个模块的时候,就会得到一个返回值,这个返回值就是被加载模块中的module.exports对象

var obj  = require('./1')   // { a: 10 }

console.log(obj)
Node.js 中定义全局变量可以通过多种方式实现,具体取决于变量的作用域和使用场景。以下是几种常见的方法: ### 1. 使用 `global` 对象 Node.js 提供了一个类似于浏览器中 `window` 对象的 `global` 对象,可以用于存储全局变量。通过将变量附加到 `global` 对象上,可以在不同模块之间共享数据。 ```javascript // 定义全局变量 global.myGlobalVariable = 'This is a global variable'; // 在其他文件中访问该变量 console.log(myGlobalVariable); // 输出: This is a global variable ``` 这种方法适用于需要在整个应用程序中访问的数据,但应谨慎使用,以避免污染全局命名空间[^1]。 ### 2. 使用模块模式(Module Pattern) 另一种更推荐的做法是使用模块来封装全局状态。通过创建一个单独的模块来管理全局变量,这样可以更好地控制变量的访问和修改。 ```javascript // globals.js const config = { port: 3000, env: process.env.NODE_ENV || 'development' }; module.exports = config; // app.js const config = require('./globals'); console.log(config.port); // 输出: 3000 ``` 这种方式提供了更好的封装性和可维护性,并且不会影响到其他部分的代码。 ### 3. 使用环境变量 对于配置信息等敏感或动态变化的数据,建议使用环境变量。这些变量可以通过 `process.env` 访问,并且通常在启动应用之前设置。 ```bash # 设置环境变量 export PORT=3001 ``` 然后在 Node.js 应用程序中读取它: ```javascript console.log(process.env.PORT); // 输出: 3001 ``` 环境变量非常适合处理开发、测试和生产环境之间的差异,如数据库连接字符串或 API 密钥等[^1]。 ### 4. 使用 Singleton 模式 Singleton 是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。这也可以用来实现全局变量的概念。 ```javascript // singleton.js class Singleton { constructor() { if (!Singleton.instance) { this.data = {}; Singleton.instance = this; } return Singleton.instance; } setData(key, value) { this.data[key] = value; } getData(key) { return this.data[key]; } } const instance = new Singleton(); Object.freeze(instance); module.exports = instance; // usage.js const singleton = require('./singleton'); singleton.setData('username', 'john_doe'); console.log(singleton.getData('username')); // 输出: john_doe ``` 这种模式允许你在整个应用程序中保持某些数据的一致性,同时提供了灵活性和扩展性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值