过去一直有一个疑问,为什么我在命令行运行 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