npm

package.json 字段

  1. private: true 表示该项目为私有的,无法发布到 npm
  2. main 可以指定包的入口,使用 require 加载包时默认会去找 node_modules 下的 index.js(.json/.node)
  3. scripts 用于指定要 npm run 的脚本,对于部分名称(start,test,stop,restart)可以省略 run
  4. dependencies 显示当前项目的依赖,并且具有版本。把项目上传到 git 仓库时,并不会上传 node_modules,使用 npm install 会下载项目的依赖
  5. devDependencies 表示开发时依赖,但是项目打包时会将开发时依赖和生产依赖都进行打包,只是包的开发者需要注意

    1. npm install vue --save(-S)
    2. npm install eslint --save-dev(-D)
  6. peerDependencies 表示对等依赖,当依赖一个包时,它必须是以另一个宿主包为前提的,比如 element-plus 的前提是 Vue3

    semver 版本规范

  7. 三个数字:x.y.z 分别表示主版本、次版本、修订版本

  8. 主版本(major):不兼容的 API 修改(breaking change)
  9. 次版本(minor):兼容性新增功能
  10. 修订版本(patch):兼容性问题修复
  11. npm 里的修饰符:

    1. x.y.z(写死):表示版本是固定的
    2. ^x.y.x:表示 x 不变,后面两个可变
    3. ~x.y.z:表示 x 和 y 不变,z 可变

      package-lock.json

      上面我们讲到了版本有关的问题,当协同开发一个项目时,如果只有 package.json 并且他人安装你的项目时使用 npm install 版本就可以变动,如果他使用了新特性,然后他的代码是无法在你的环境下运行的,所以就有了 package-lock.json 文件,来定死版本。
      相关字段:
  12. name

  13. version
  14. lockfileVersion
  15. requires: true 表示后面的 dependencies 字段也可以使用 requires 代替
  16. package 下的dependencies 表示依赖的依赖,即包的开发者开发这个包使用到的其他依赖
  17. 包的字段:

    1. version 是定死的版本
    2. resolved 记录下载地址(npm registry)
    3. integrity 用来从缓存中获取索引,再通过索引去获取缓存的文件

      npm install 过程

      image.png

      npm 其他命令

      文档:https://docs.npmjs.com/cli/v8/commands
  18. npm rebuild: 强制重新安装依赖

  19. npm clean cache: 清除缓存(npm config get cache 获取缓存所在路径)

    yarn

    早期的 npm 存在很多缺陷,比如没有缓存、安装速度慢、版本管理混乱、依赖相关的问题。

    cnpm

    国内使用
    镜像源:https://registry.npmmirror.com/

    npx

    npm 5.2 版本加入的命令,用于调用项目内安装的包 ```bash ./node_modules/.bin/webpack —version

使用 npx

npx webpack —version

  1. 1. npx 会先去项目中的 node_modules 下的 .bin 里找可执行命令,然后再找环境变量,如果不存在,会从远程下载包然后执行,执行之后删除
  2. 2. package.json script 字段中的命令也会去 node_modules 下的 .bin 目录找
  3. <a name="gm8ed"></a>
  4. ## pnpm
  5. performant npm,速度快,节省磁盘空间<br />每个项目都有 node_modules,占用空间大
  6. <a name="EXq4W"></a>
  7. ### 硬链接
  8. 电脑文件系统中的多个文件平等的共享同一个文件存储单元,删除一个文件名字后,还可以用其它名字继续访问该文件
  9. ```bash
  10. // windows
  11. mklink /H foo.js foo_hard_link.js
  12. // linux
  13. ln foo.js foo_hard_link.js

软连接(符号链接)

软连接是一类特殊的文件,包含一条以绝对路径或相对路径的形式指向其它文件或者目录的引用

  1. // windows
  2. mklink foo.js foo_hard_link.js
  3. // linux
  4. ln -s foo.js foo_hard_link.js

非扁平的 node_modules