我们在使用umi
vue-cli
等进行项目开发的时候,都是使用命令去启动我们的服务,那么这些框架是启动一个服务的呢?
使用node执行js
我们都知道使用node
命令可以运行js脚本
所以在npm的项目中会有如下配置,原理就是将长长node
命令行简写为start
,作为npm命令的脚本入口,相当于取了一个别名:
// 使用 npm run start 启动项目
"scripts": {
"start": "node ./src/index"
}
声明的命令的原理
如果我们想开发一个第三方的依赖库,项目中如何使用第三方库的启动命令呢?这里也就是umi
等框架中如下代码的原理了:
// 这里的 umi 命令为第三方框架的声明命令,我们可以运行umi dev来运行umi框架中的入口文件,启动umi项目了
"scripts": {
"start": "umi dev",
}
如何实现一个自定义声明命令
既然我们了解了原理,现在就来实现一个名称为:mycommand
的命令行吧!
-
使用
npm init
初始化{ "name": "command", "version": "1.0.0", "description": "命令行基础实践", "main": "index.js", "bin": { "gcommand": "./bin/index.js" }, "author": "gaoyan", "license": "ISC" }
-
配置上
bin
属性,并添加bin
脚本的入口路径"bin": { "mycommand": "./bin/my-command.js" },
-
编写
my-command.js
代码#!/usr/bin/env node console.log('My Command!')
现在我们的第三方库就完成了,我们为其他用户提供了一个名叫mycommand
的可执行命令,并指定了命令的代码入口
使用自定义声明命令
bin
声明的命令需要被安装到 node_modules
的 .bin
目录下才能找到,所以在未发布的情况下,我们可以使用npm link
去做一个链接指向
-
使用
npm init
初始化 -
使用
npm link command
将依赖的指针指向我们的第三方库,注意link的名字为第三方库package.json
中的name
-
添加npm启动脚本,注意这里使用的是npx
npx 是 npm 自带的一个工具,它会自动查找当前依赖包中的可执行文件,如果没找到,就会找你全局安装的命令,如果还是没找到,那它就会从远程服务器上下载你需要的依赖。
"scripts": { "start": "npx command", }
至此,我们已经将自定义命令行的实现和使用已经了解清楚了。如果需要开发一个自己的第三方库,这是最最基础的知识啦....