1 使用强大的 require() 方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。
2 Node.js 中的模块作用域
1. 什么是模块作用域
和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。防止了全局变量污染的问题
2 向外共享模块作用域中的成员
1. module 对象
在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息,打印如下
console.log(module);
Module {
id: '.',
exports: {},//exports空对象
parent: null,
filename:
'C:\\Users\\lijiyu\\Desktop\\lean\\nodeLean\\day2\\code\\10.演示module对象.js',
loaded: false,
children: [],
paths:
[ 'C:\\Users\\lijiyu\\Desktop\\lean\\nodeLean\\day2\\code\\node_modules',
'C:\\Users\\lijiyu\\Desktop\\lean\\nodeLean\\day2\\node_modules',
'C:\\Users\\lijiyu\\Desktop\\lean\\nodeLean\\node_modules',
'C:\\Users\\lijiyu\\Desktop\\lean\\node_modules',
'C:\\Users\\lijiyu\\Desktop\\node_modules',
'C:\\Users\\lijiyu\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules' ] }
2. module.exports 对象
在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。
3 Node.js 中的模块化规范
Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖。
CommonJS 规定:
① 每个模块内部,module 变量代表当前模块。
② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。
③ 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。
4. devDependencies 节点
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。
与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。
您可以使用如下的命令,将包记录到 devDependencies 节点中:
// 简写
npm i 包名 -D
//完整写法
npm i 包名 --save-dev
// 都会进入devDependencies
- 项目包
那些被安装到项目的 node_modules 目录中的包,都是项目包。
项目包又分为两类,分别是:
⚫ 开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)npm i 包名 -D
⚫ 核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到)npm i
3. npm与包
3.1 发布包
- 注册 npm 账号
① 访问 https://www.npmjs.com/ 网站,点击 sign up 按钮,进入注册用户界面
② 填写账号相关的信息:Full Name、Public Email、Username、Password
③ 点击 Create an Account 按钮,注册账号
④ 登录邮箱,点击验证链接,进行账号的验证
3.2. 登录 npm 账号
npm 账号注册完成后,可以在终端中执行 npm login 命令,依次输入用户名、密码、邮箱后,即可登录成功
注意:在运行 npm login 命令之前,必须
先把下包的服务器地址切换为 npm 的官方
服务器。否则会导致发布包失败!
3.3. 把包发布到 npm 上
将终端切换到包的根目录之后,运行 npm publish 命令,即可将包发布到 npm 上(注意:包名不能雷同)。
3.4. 删除已发布的包
运行 npm unpublish 包名 --force 命令,即可从 npm 删除已发布的包。
注意:
① npm unpublish 命令只能删除 72 小时以内发布的包
② npm unpublish 删除的包,在 24 小时内不允许重复发布
③ 发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包!