Web前端架构师之路

Week02 -脚手架的实现原理

2020-12-29  本文已影响0人  一恋蝶梦
为什么全局安装@vue/cli后会添加vue的命令?
npm install -g @vue/cli

查看vue实际文件路径

> which vue
/usr/local/bin/vue

bin目录下存放的是可执行文件

> cd /usr/local/bin
> ll
lrwxr-xr-x  1 song  admin    39B 12 28 21:48 vue -> ../lib/node_modules/@vue/cli/bin/vue.js

可以看到vue实际是一个软链接,指向:../lib/node_modules/@vue/cli/bin/vue.js

绑定管理在哪里指定的呢?

进入到@vue/cli安装目录

> cd /usr/local/lib/node_modules/@vue/cli
> ll
-rw-r--r--    1 song  admin   2.5K 12 28 21:48 package.json

在package.json中有一个bin的配置

 "bin": {
    "vue": "bin/vue.js"
  },

这里配置了安装完之后的软链接名称,以及指向的实际文件

全局安装@vue/cli时发生了什么?

npm install -g @vue/cli

vue执行一个js文件,为什么可以执行它?
# 这两条命令执行是等价的
> vue
>/usr/local/bin/vue 
#!/usr/bin/env node

自己创建一个js文件,test.js中第一行加入此代码,通过 ./test.js也能直接执行。
为什么能直接执行?
这句话的意思是,告诉系统在环境变量中去找node命令,来执行此文件

> /usr/bin/env node # 会将node命令执行起来,与直接执行node是一样的效果

所以./test.js等于 /usr/bin/env node test.js 等于 node test.js
chmod 777 test.js 设置文件为可执行文件

自定义一条命令

思路:在环境变量中创建一个软链接,执行 test.js即可 (软链接可以嵌套)
在 /usr/local/bin下执行

>  ln -s <路径>/test/index.js <name> #删除软链接 rm <name>
脚手架命令执行流程

脚手架的开发流程

#!/usr/bin/env node

脚手架开发难点

vue create
vue add 
vue invoke
vue command [options] <params>

options全称:--version、--help
options简写: -V、-h

理解npm link

理解npm unlink

创建一个脚手架

> mkdir cli-test # 创建一个文件夹
> npm init -y # 初始化

cli-test 目录:
-- package.json
-- bin

index.js 文件:

#!/usr/bin/env node
console.log('Hello cli')

package.json文件:

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

将脚手架发布到npm

> npm login # 登录npm
> npm publish # 发布

在cli-test目录下,进行全局安装 npm install -g cli-test 就会建立一个软链接,方便进行本地调试,
通过npm link 也可。

上一篇下一篇

猜你喜欢

热点阅读