跳到主要内容

包管理工具

参考 掘金 洋 z

掘金

掘金 从终端命令解析器说起谈谈 npm 包管理工具的运行原理

npm run xxx

  1. package.json 中有一个bin字段,用于指定当前包的可执行脚本
  2. npm i xxx 时会在node_modules/.bin/创建好对应的可执行文件
  3. .bin目录下的文件,会找到对应的可执行脚本(看一眼对应的文件就明白了)
  4. npm run xxx时,xxx对应的命令,会在node_modules/.bin/

使用场景

为开发的模块(待发布的 npm 包)创造一个全局链接,方便进行测试。

创建、使用、去除软链

link-module 需要软链的包,project-A 想要使用 link-module 的包

  1. 在 link-module 中npm link,创建全局软链
  2. 在 project-A 中npm link link-module
  3. 使用完后npm unlink link-module,npm unlink link-module -g 或在 link-module 中npm unlink

其他

  • npm yarn pnpm 之间 link 不能混用,它们各自维护自己的全局 link(猜测)
  • link 的骚操作stackoverflow

全局命令

typescript为例

npm install typescript -g
bash

指定命令后会在系统变量 PATH 中设置的 node 命令所在的目录里写入以下命令文件

npm-global-install

typescript 包会装在 同级目录的 node_modules 下

Node CLI 原理

在 js 文件开头加入

#!/usr/bin/env node
js

这段代码的意思是指定 node 为脚本解析器

配置 package.json 文件:

{
"bin": {
"cli-test": "./index.js"
}
}
json

dependencies 和 devDependencies

比如我们在项目中安装 Element Plus 组件时,Element Plus 组件库中的 dependencies 选项中的依赖就同时被下载。devDependencies 选项的依赖则不会被下载

并不是 dependencies 选项中的依赖才会被一起打包,而 devDependencies 选项中的依赖就一定不会被打包。事实上,dependencies 和 devDependencies 选项中的依赖是否被打包,只取决于项目中是否引入了改依赖