Node.js与npm

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差不多.

  1. 远程仓库
  2. global全局仓库(本地仓库)
  3. 项目依赖库

项目目录里面:

  1. package.json
  • 保存了该项目里所有的依赖包的包名信息, 以及版本信息.
  1. 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
posted @ 2020-08-25 21:29  Jrri  阅读(219)  评论(0编辑  收藏  举报