一、自定义模块的要点
-
不要用特殊的文件名
-
一般会用模块名给它命名。类比于核心模块,例如,你的模块叫myModule,则这个js文件最好叫myModule.js
-
不要与核心模块的名字重复了。就像我们定义变量不要与核心关键字重名,你自己定义的模块也不要叫fs.js,因为nodejs有一个核心模块就叫fs.js。
-
导入模块的路径是相对路径
-
导入之后,记得console.log
-
记得导出
-
module.exports 是固定写法,一般放在文件的最末尾,也只用一次。
-
module.exports表示当前模块要暴露给其它模块的功能。
-
它可以导出对象,数组,函数等等类型。为了方便组织代码,导出对象的情况比较多。
-
不必要导出所有函数,对象,数组等。那些没有导出的部分就相当于这个模块的内部变量了。
-
拓展:导出模块的两种方式
在阅读其它人的代码时,可能会遇到这两种不同的写法。所以我们还是有必要了解一下的。
导出模块有两种方式
参考https://nodejs.org/api/modules.html#modules_exports_shortcut
-
exports
-
module.exports
// 定义方法,常量
let myPI = 3.14
let add = (a,b) => a + b;
// 导出,两种方法任意都可以
// 方法一:
exports.myPI = myPI
exports.add = add
// 方法二:
module.exports.myPI = myPI
module.exports.add = add
// 方法二(变形)
module.exports = {
myPI,
add
}
两个对象的关系
初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象
exports是module.exports的别名,即:
exports === module.exports // 输出是 true
所以下面两种写法的效果是一样的:
//1 mymodule.js
exports.f = function(){ }
exports.pi = 3.1415926
//2 mymodule.js
module.exports.f = function(){ }
module.exports.pi = 3.1415926
-
在定义模块时:
如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。
在引入某模块时:以该模块代码中module.exports
指向的内容为准。
结论
在导出模块过程中,建议只用一种方式(建议直接使用module.exports)
npm 常用命令
- 查看
npm -v // 查看npm 版本
where node // 查看node的安装目录
where npm // 查看npm的安装目录
npm root -g // 查看全局包的安装目录
npm list -g --depth 0 // 查看全局安装过的包
- 升级 npm
npm install npm --global // 简写成 -g
npm install npm -g
- 初始化
package.json
npm init -y // 或者是npm init --yes
- 安装第三方包
// 安装当前目录下package.json中列出的所有的包
// 如果之前安装了包,又在package.json中手动删除依赖
// 它相当是删除包
npm install
// 全局安装
npm install 包名 -g // npm install -g 包名
// 本地安装,没有指定版本,默认安装最新的版本
npm install 包名
// 一次安装多个包,空格隔开
npm install 包名1 包名2 包名3
// 安装指定版本的包
npm install 包名@版本号
// 简写。把install简写成 i
npm i 包名
- 删除已安装的包
npm uninstall 本地安装的包名
npm uninstall 全局安装的包名 -g
- 设置npm的register
如果你不想用 nrm
,下面这个原生的命令也可以切换镜像源(从哪里下载包)。
npm config set registry https://registry.npm.taobao.org
## 所有npm i 包 都会从taobao的镜像去下载。
## 配置后可通过下面方式来验证是否成功
npm config get registry