因为对脚手架有点兴趣,所以研究了一下,之后还在写lerna相关的文章。如果喜欢,请给个赞。node脚手架的原理以vue-cli为例。vue--help系统如何识别vue?通过whichvue命令whichvue/c/Users/Administrator/AppData/Roaming/npm/vue进入npm目录可以找到变量,通过npmi-g[pages]可以看到我们在该目录下安装了vue.cmd]文件(vue还有另一个文件)@IFEXIST"%~dp0\node.exe"("%~dp0\node.exe""%~dp0\node_modules\@vue\cli\bin\vue.js"%*)ELSE(@SETLOCAL@SETPATHEXT=%PATHEXT:;.JS;=;%node"%~dp0\node_modules\@vue\cli\bin\vue.js"%*)不是很清楚,但是我们大概能猜到\node_modules\@vue\cli\bin\vue.js就是我们运行解析文件的命令,进入\node_modules\@vue\cli\bin目录下的node./vue.js--helpand我们会发现和vue有关--help可以合理推断系统是通过vue.cmd执行上述命令的。关键是为什么系统不用加节点前缀就可以直接找到vue;打开vue.js文件#!/usr/bin/envnode....#!/usr/bin/envnode是关键,这一行可以帮助我们直接找到系统变量node,这样前缀npmpackage(脚手架包)可以通过npm官网注册,运行npmlogin命令登录后,我们可以设置新建一个文件夹,进入文件夹npminit,指定package.json中的main字段即可发布库。但是如果我们想像vue-cli一样发布一个可以通过vue命令解析的包,我们要添加包。json的bin字段指定我们要运行的文件#package.jsonfile..."bin":{"vue-test":"bin/index.js"},...比如我们要通过似曾相识e-test打印helloworld!!$vue-testhelloworld!!指定bin字段后#bin/index.js文件#!/usr/bin/envnodeconsole.log("helloworld!!")现在我们要测试命令是否有效本地测试链接你可以测试本地包npm链接
