前言
npm init
还是挺神奇的,原本我以为它只是用来初始化一个 package.json
文件,没想到它还能用来初始化一个项目。
比如,我常用这个指令的 2 个变体:
-
npm init --yes
: 在当前目录创建一个默认 package.json 文件(无提问) -
npm create vite@latest my-vue-app -- --template react-ts
: 创建一个基于 Vite 的 React 项目。npm create
是npm init
的一个别名
第一个比较好懂,--yes
(或 -y
) 是 init 指令的选项参数,指定以无提问方式创建 package.json 文件。
第二个命令,create
后面跟的 vite
,叫 initializer(@latest
表示使用最新版本),对应 create-vite
的 npm 包,执行这个包下的 index.js
文件,是一个 shell 脚本(#!/usr/bin/env node
),目的是为了将一份模板项目复制到当前目录中。
当然,这只是肤浅的理解。阅读官方文档,可以系统全面的了解 npm init
命令的使用。
基础使用
npm init <initializer>
alias: create, innit
npm init 有两个别名:npm create
和 npm innit
。
其中,initializer 是可选参数。如何忽略 initializer 参数,init 指令是用来创建 package.json 文件的。默认情况下会问你一些列问题,以便为包提供必要的信息。可以通过 -y/–yes 选项忽略问题,全部采用默认值;如果应用 initializer 参数,内部会使用 npm-exec
执行名为 create-<initializer>
的包来创建项目。
以下是 npm init 指令的示例:
# create a scoped package using current directory name.
npm init --yes
# If you pass --scope, it will create a scoped package using current directory name.
npm init --scope=@foo --yes
以下是 npm init
npm init foo -> npm exec create-foo
npm init @usr/foo -> npm exec @usr/create-foo
如果你本地已经安装了某个版本的 create-foo 包,那么 npm init foo 命令默认就会使用它。如果你希望强制使用 create-foo 的最新版本或指定版本的包,那么可以使用 @latest 或 @x.x.x 的 tag。
npm init foo@latest # fetches and runs the latest create-foo from the registry
npm init foo@1.2.3 # runs create-foo@1.2.3 specifically
附加选项
npm 从 v7 之后,增加了一个特殊的双连字符(--
)支持。
下面是前后对照的案例:
# npm 7+, extra double-dash is needed:
npm create vite@latest my-vue-app -- --template ve
# npm 6-
npm create vite@latest my-vue-app --template vue
上面两个命令作用是一样的,等价于下面的命令:
npm exec -- create-vite@latest my-vue-app --template vue
可以看见,在 npm v6 之前,my-vue-app --template vue
都是作为执行 create-foo 的参数。npm v7 之后, 要使用 --
分隔符,区分是给 create-foo 的选项还是给 npm create 的选项。
这里有一个更详细的示例,显示选项参数的传递规则——是给 npm cli 还是 create-
npm create vite@latest my-app -y --registry=<url> -- --hello -a
npm exec -y --registry=<url> -- create-vite@latest my-app --hello -a
可以发现,--
之前的选项都是给 npm create
的,--
之后的选项都是给 create-vite 的。
还要特别注意的是,在 create-vite@latest
之后、--
之前,所有不以 -
作前缀的选项,还是作为 create-vite
选项被应用。
原文始发于微信公众号(写代码的宝哥):npm init:基本使用与附加选项介绍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/243681.html