1、前言
之前写过一篇关于如何发布一个npm包到npmjs,有兴趣的可以看一下这篇文章 juejin.cn/post/712782…。
主要代码如下所示
// package.json中的bin路径脚本 "bin": { "create-ak-vue": "./bin/vue.js", "create-ak-vite": "./bin/vite.js" },
然后bin文件夹下两个文件的代码分别为
// vite.js #! /usr/bin/env node console.log('vite.1js') console.log('vite.2js') // vue.js #! /usr/bin/env node console.log('vue.js') console.log('vue.js')
大致的代码就是这样了,现在假设一下,我们的代码已经发布出去了,那么开始安装
// 全局安装aehyok-cli npm i aehyok-cli -g // 然后执行 create-ak-vue create-ak-vite // 或者下面两个 npm create ak-vue npm create ak-vite // 再或者下面两个 npm init ak-vue npm init ak-vite
执行效果如下
可以发现这三种情况实现了同样的功能
2、npm init、npm create
印象里面大家可能对它的记忆可能都停留在,npm init
之后是快速的初始化package.json
,并通过交互式的命令行让我们输入需要的字段值,当然如果想直接使用默认值,也可以使用npm init -y
快速生成一个简单默认的package.json。
create-app-react
创建项目命令,官网链接可以直接查看 create-react-app.dev/docs/gettin…
//官网的三种命令 npx create-react-app my-app npm init react-app my-app yarn create react-app my-app //我又发现npm create也是可以的 npm create react-app my-app
上述这些命令最终效果都是可以执行创建项目的
同样的vite
创建项目的命令
//官网的命令 npm create vite@latest yarn create vite pnpm create vite // 指定具体模板的 // npm 6.x npm create vite@latest my-vue-app --template vue //npm 7+, extra double-dash is needed: npm create vite@latest my-vue-app -- --template vue yarn create vite my-vue-app --template vue pnpm create vite my-vue-app --template vue
可以发现vite
官网没有使用npx
命令,不过我在我自己电脑上尝试了另外几个命令确实也是可以的
npx create-vite my-app npm init vite my-app
通过上面的对比可以一个小问题,yarn create
去官网查了是存在这个指令的,官网地址可看 classic.yarnpkg.com/en/docs/cli…
而对于npm create
这个命令在npm官网是看不到的,但是在一篇博客中发现了更新日志
意思就是说npm create xxx
和npm init xxx
以及yarn create xxx
效果是一致的。那么我们来本文的命令行
// 我们是通过npm安装的,并且包名里是包含create的 npm i create-vite-pretty-lint // 那么以下几种方式都可以使用的 npm init vite-pretty-lint npm create vite-pretty-lint yarn create vite-pretty-lint npx create-vite-pretty-lint
3、npx
假如我们只在项目中安装了vite
,那么node_modules
中.bin
文件夹下是会存在vite
指令的
如果我们想在该项目下执行该命令第一种方式便是
第二种方式就是直接在package.json的scripts属性下
关于npx的详细说明可以看一下阮一峰大佬的精彩分享 www.ruanyifeng.com/blog/2019/0…
4、总结
其实前言中的执行命令还可以添加一个
npx create-ak-vue
所以最后其实可以有四种方式去执行package.json中bin命令,总共有四种执行方式,真的太可怕了。