Hi, 我是 Lem, 最近在被标题的几个命令给搞疑惑了,都是 nodejs 的包管理工具,各自都是干嘛用的?
前言
作为一名前端开发者来说,npm 和 yarn 都不陌生,它们除了可以下载和管理依赖包外,还能和 npx 一样可以快速初始化项目,那就使用到了 create 命令。
以 create-react-app 为例
我们有三种创建应用程序的方式:
npx create-react-app my-app
npm create react-app my-app
yarn create react-app my-app
什么是npx
NPX (Node Package Executor),是包的执行器。
使用方式:
-
以简短的方式执行本地模块:如果要执行项目依赖包的执行文件,则需要键入以下内容:
$ ./node_modules/.bin/jest
; 但使用 npx 命令就简洁很多:$ npx jest
-
一次性执行全局模块:有些全局包括:
create-react-app
使用频率低,在需要时可以用$ npx create-react-app my-react-app
,这样就不需要全局安装create-react-app
,还可以保证每次均使用最新版本。
npm、yarn create
npm、yarn create 使用方式:
npm create <starter-kit-package> [<args>]
yarn create <starter-kit-package> [<args>]
命令底层做了两件事情:
- 全局安装 starter-kit-package 包,若本地已经存在尝试更新到最新版本
- 执行包的可执行文件
以 yarn create react-app my-app
为例,同下面的命令等价
$ yarn global add create-react-app
$ create-react-app my-app
其实就是使用 create-<starter-kit-package>
包的快捷方式。
npm init
也是用 create-*
包的快捷方式,来创建项目。和 npm create
的作用一样;
但其实,npm init
比 npm create
更常见,官方文档更多的是使用 npm init
命令,而 npm create
则没那么多人关注,因为 npm create
是 npm init
的别名而已,可以在 npm cli CHANGELOG 发现到:
总结
npm create
、npm init
和yarn create
都是利用包名的规则,create-*
, 先全局下载到本地再执行
npx xxx
则没有包名的约束,临时下载执行后删除,均使用最新包版本;
更推荐 npx xxx
这种更实用方式,而且不用关注这么多 create 和 init 命令了
公众号链接:web5分钟