Node.js与npm
某种层面上来讲, node.js对前端以及JavaScript的影响及其巨大和深远.
运行在Chrome V8 引擎上. 而这个引擎能够对本地文件进行操作.
在此之前, 前端代码全都运行在浏览器上.
这样的情况下,因为同源策略, 前端语言无法对其他文件进行操作. 限制极大.
而node的出现, 无疑为前端语言增加了很多可能性.
npm
npm是node的一个重要组成部分, 是node的包管理工具.
具有强大的包管理功能.
虽然在使用的过程中, 时常出现各种问题, 但不得不说. 它已经是目前用的最多的包管理工具.
配置文件
配置方面,分内置配置,用户配置, 项目配置
内置配置的文件, 保存在 %NODE_HOME%/node_modules/npm/.npmrc
用户配置文件, 保存在 ~/.npmrc
项目配置文件, 需要放在project/.npmrc
npm的包管理规则
在大的方面来讲.
npm的仓库概念感觉和Maven差不多.
- 远程仓库
- global全局仓库(本地仓库)
- 项目依赖库
项目目录里面:
- package.json
- 保存了该项目里所有的依赖包的包名信息, 以及版本信息.
- package-lock.json
- 成功执行过一次
npm install
命令后会出现, 显示了当前依赖库所采用的具体版本. - 当如果包的版本发生变化, 则需要删除该文件, 重新生成.
构建过程
当找包的时候会从 项目依赖库 或者 全局仓库里找对应的依赖.
如果找不到, 才会去远程仓库里面下来拉取.
在项目编译的时候,npm会先从package.json
读取所需要的包内容.
读取包的名称, 以及对应的版本.
然后会去找对应的依赖包.
如果执行的是npm install
,则会去项目目录下的node_modules
找
如果执行的是npm install -g
,则会去设置的node_global
里面找.
当都没有找到的时候, 会去npm设置的远程仓库
里面找.
都没有找到, 则编译失败.
当找到包的时候, 一般情况下, 会在项目目录下创建node_modules
,放置该项目所用的包.
当执行npm run build
的时候, 会执行构建过程.
当完成编译过程之后, 会在项目目录下生成一个dist
目录.里面放置着所有构建完成的内容.
npm的包管理逻辑
有时候会吐槽, 哪里都能见到node_modules这个文件夹, 而且占用空间极大.
npm对包管理方面, 进行了别出心裁的设计.
虽然使用的时候感觉到十分难用, 但是它的确是解决了不少的依赖, 以及版本问题.
这方面我的知识还不够深切, 没有能够完全理解npm的包管理规则.有时间再仔细琢磨一下npm的包管理理念.
调用npm
通常情况下,我们在实现自动化的时候, 会考虑在.bat或者.sh里面完成大部分的指令.
然而当我在windows下使用npm进行构建的时候, 经常会发现一个问题.
在使用.bat执行npm命令的时候. 会导致.bat之后的命令不再执行.
一直不太清楚是什么原因导致的这个结果.
但是我一直采用的应对方式是,
在.bat中用call
来调用npm命令
例如:
npm install && npm run build
会写为异步调用:
call npm install && call npm run build
npm源修改
修改 远程仓库的指向 , 直接修改对应的.npmrc
的配置文件即可.
但有的时候,总是有一些不是很常见的需要.
也可以直接采用命令行的方式修改npm远程仓库
npm config set registry http://192.168.1.1
值得一提的是:
大部分时间里, 项目的前端编译出现问题, 都是npm的install出现问题.
而npm无法成功install, 很多时候是源没有设置好. 无法成功获取到所需要的依赖包.
版本管理
有时项目需要, 需要明确各个工具的具体版本.
则需要明确一个概念.
node是node, npm是npm.
有的时候, 库的版本会和node的版本不兼容.
我们要明确 node的版本, npm的版本, 库的版本.
node -version
npm --version
gulp --version
vue --version