【Npm原理】Npm 执行命令中的环境变量

今天,我们来探索,npm run 到底是怎么执行命令的,模块是否一定要全局安装呢?

下面我们分四个步骤来详细总结一下

  1. npm 的命令行存放位置
  2. npm 命令添加过程
  3. npm 命令执行过程
  4. 项目本地安装是否必要

npm 命令行包存放位置

npm 中所有可供调用的命令行包 存放在 项目根目录的 ./node_modules/.bin/

大家可以看到一个 cmd 文件 和一个 无后缀的文件

cmd文件 是 一个 windows 内核脚本文件,可以直接双击运行

我们以 grunt 为例,可以看到有两个文件,一个 grunt,一个 grunt.cmd

看一下 grunt.cmd 内容,大概就是 使用node 执行 gurnt 的包入口文件

而 window 下 npm run 调用的也是这个 cmd 文件

npm 命令添加过程

npm 在 执行 install 时,会分析每个依赖包的 package.json 中的 bin 字段,并将包含的命令安装到 ./node_modules/.bin 目录中

我们 现在来添加一下自己的包,来测试一下

在 自己创建的包的 package.json 中,给 bin对象 添加一个键值对

配置格式 如下:

命令名称:入口执行文件

执行 npm install file:./npm-install-test

为什么这么做,可以参考我的另一篇文章 【npm】简化本地文件引用路径

好的查看 bin 目录,发现 我们的 apple 添加到 node_modules/bin 下面了!

npm 命令执行过程

npm run 命令执行的时候,会把 ./node_modules/.bin/ 目录添加到执行环境的 PATH 变量中

如果有些命令没有全局安装,只安装在了 当前项目的 node_modules 中

那么使用 npm run 一样可以调用命令

我们来测试一下,是不是真的可以这样

1、我们在根目录的 script 添加一条命令,用来执行 grunt

2、我们先确定并没有全局安装 grunt,保证 npm run g 并不是调用 全局的 grunt 命令

3、本地项目下安装 grunt

4、运行命令,perfect!!

那么,我们就能确定啦,npm run 运行命令的时候,会把 bin 目录下的命令行包 添加到 执行环境变量中,而不用 全局安装

项目本地安装是否必要

有些工具,全局安装的同时,也必须本地项目安装

因为 不同项目依赖的 版本不同,比如说 webpack,webpack.config.js 只兼容特定版本的 webpack

项目本身依赖的 webpack3 ,而全局安装是 webpack4,如果此时项目不安装 webpack ,那么无法构建成功

结尾

本来文章的内容是直接从我的笔记复制过来的

但是复制过来一检查,诶,这个没讲明白,那个没说清楚。

虽然说没人看,但是保不定哪天有人看没看明白呢??

然后就是一顿捣鼓,导致最后内容越来越多.....当然了,自己也了解了更详细了一些

原文发布于微信公众号 - 神仙朱(skying-zhu)

原文发表时间:2018-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券