npm是如何执行scripts中命令的?

2022-09-07 15:31:13 浏览数 (1)

过去一直有一个疑问,为什么我在命令行运行 npm start,可以正常启动 webpack,而直接使用 craco start 不行?

后半句很好理解,直接使用 craco start 会从系统的环境变量 $PATH 中查找 craco,因为之前没有配置过所以找不到。但是, npm 为什么能执行呢?

直到看到同事的一句服务端编译 less 的代码

代码语言:javascript复制
node node_modules/.bin/lessc x.less x.css

略微有了些概念,npm 应该是去去 node_modules 中的 .bin 中找到了 lessc 这个命令工具,而 craco 也应该是到这里来找命令工具了。

刚好看到一篇写的不咋对的热点博客,所以也来整理一下。

less 或 craco 这样的 npm 包自己的 package.json 中包含一句

代码语言:javascript复制
"bin" : {

    "craco" : "./bin/craco.js"

},

在运行 npm install craco 时,npm 会检索到这项配置并将 craco 包中 /bin/craco.js 软链到 node_modules/.bin 中

]

之后再运行 npm start (craco start) 时,npm 会直接执行 node node_modules/.bin/craco start

0 人点赞