🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
目录 (づ ̄ 3 ̄)づ=> [TOC] ## 模块 ### 什么是模块 >[info]一个JS文件就是一个模块 NodeJS模块文件是依据它自己发明的COMMONJS规范来书写的,一个常见的模块长这样: ``` let obj = {}; module.exports = obj; //导出obj ``` ### 模块化的好处 >[success]低耦合、高内聚、方便维护、解决命名冲突... - 低耦合:本身模块和其它模块文件没有关联 - 高内聚:相同的逻辑代码放在一个文件中 - 方便维护:都放到一个文件中的了。。。你说呢 - 解决命名冲突:只要文件名不重复就好 - 方便调用:若果是以前为了解决命名冲突可能导致命名过长,调用这个命名过长的对象下的属性就很。。。 ### 模块的引入 >[info]我们可以通过使用require方法来引入一个文件 ``` require('./文件名'); //引入本地模块 reuqire('模块名); //引入第三方 ``` 可以发现reuqire时并没有带上后缀,这是因为node会帮我们从`.js` `.node` `.json`三种后缀从前往后依次查找,看是否有匹配上的文件。且在当前工程的node_module中没有找到还会往上查找,直到根目录。 **注意:** 第三方模块引入时可以不用带上`./`。 --- #### 缓存机制 >[warning] 模块只会被加载一次,这意味着如果被加载的模块有打印代码只会打印一次,且如果是在同一个入口文件下的不同文件中多次require一个相同文件,这个被多个不同文件引入的文件其实同一份引用。 ![](https://box.kancloud.cn/a00fff3cadad3b153da5b419a900cb01_1044x510.png) 相对的浏览器中的JS引入是不存在缓存机制的 #### 模块查找链 我们可以通过以下方式来查看查找链: ``` console.log(module.path); //会打印出当前模块所有可能的node_module路径 ``` #### NODE_PATH >[warning] **注意**:需在环境变量中手动设置查询链的顶端NODE_PATH ![](https://box.kancloud.cn/30a5542764dc48796331ddf614a163c6_848x699.png) #### 循环引入 >[warning]有可能会出现这么一种情况,模块A引入了模块B,模块B又引入了模块A,**那么模块B引入的模块A只是模块A已经读过的地方(即引入模块B之前的代码)** ### 模块的导出 #### 模块包装 >[success] 一个运行在NodeJS下的JS文件会被NODE自动打包成一个匿名函数 ``` function(exports,require,module,__filename,__dirname){ exports = module.exports = this = {}; ... return module.exports; } ``` #### 导出模块中的内容 ``` let obj = {}; modules.exports = obj; ``` >[danger]**注意:** 导出到一个文件时间上就是把上面NODE打包的匿名函数赋值粘贴到那个文件上,而匿名函数中实际return 的是module.exports ## NPM是什么 >[success] NPM:NODE Package Manager,是NodeJS的包管理工具,我们可以通过NPM来下载各种各样的第三方模块或则一个包(多个模块) ### 常用命令 - npm install(简写为i) [-g ][--save-dev(简写为-D)] 第三方模块/包的名字[@版本号] 默认为开发依赖;-D为开发依赖;-g为全局安装;npm i不带参数为安装packge.json上的全部依赖 - npm init [-y] 初始化一个包,-y代表选用默认配置 - npm uninstall [其它参数同install] 卸载一个包 ### 发布一个包 >[danger] 注意发布前要把registry源改回来 ``` npm login/addUsername //登录/注册 NPM账号 npm publish //发布当前工程目录下的包 npm unpublish 包名@版本号//撤销发布 ``` ## NRM是什么 >[success] NRM:NODE Registry mannager,是一个NPM包,我们可以通过安装它来切换NPM的镜像(源),以达到更好的下载体验。 ### 常用命令 - npm i -g nrm 安装nrm - nrm ls 查看所有镜像 - nrm use 镜像名 使用选中的镜像 - nrm test 镜像速度测试 ### 其它 > 为了解决国内下载速度慢还可以选用两种方式 #### 安装cnpm ``` npm i -g cnpm //然后就可以把命令中的npm替换成cnpm其它和npm一样用 ``` #### 安装yarn ``` npm i -g yarn //略微不同 详见npm包 ``` ## NVM是什么 >[success] NVM:NODE Version Manager,node的版本管理工具,也是一个npm包,需要先卸载已经安装的NPM和NodeJS ### 常用命令 nvm常用命令: nvm install <version> ## 安装指定版本,可模糊安装,如:安装v4.4.0,既可nvm install v4.4.0,又可nvm install 4.4 nvm uninstall <version> ## 删除已安装的指定版本,语法与install类似 nvm use <version> ## 切换使用指定的版本node nvm ls ## 列出所有安装的版本 nvm ls-remote ## 列出所以远程服务器的版本(官方node version list) nvm current ## 显示当前的版本 nvm alias <name> <version> ## 给不同的版本号添加别名 nvm unalias <name> ## 删除已定义的别名 nvm reinstall-packages <version> ## 在当前版本node环境下,重新全局安装指定版本号的npm包