系列文章:
npm(五):组件发布npm包全流程 (使用rollup打包工具)
npm init 在项目中引导创建一个package.json文件
3、查看项目版本信息,默认1.0.0 npm version
npm install 安装模块
此命令安装一个包,以及它所依赖的任何包。如果包有 package-lock 或 shrinkwrap 文件,依赖项的安装将由它驱动,npm-shrinkwrap.json
如果两个文件都存在,则优先。请参阅package-lock.json和npm-shrinkwrap。
语法
npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file>
npm install <tarball url>
npm install <folder>
简写: npm i
常见的选项: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run]
-
npm install:在本地 node_modules 文件夹中安装依赖项。
-
npm install <name>:安装包,默认会安装最新的版本
-
使用一些额外的标志来控制包的保存位置和方式:
-
参数 | 简写参数 | 作用 |
--global | -g | 在全局可访问的位置安装一个包 |
--save-prod | -P | 默认值,包将出现在您的dependencies |
--save-dev | -D | 包将出现在您的devDependencies |
--save-optional | -O | 包将出现在您的optionalDependencies |
--no-save | 防止保存到dependencies | |
使用上述任何选项将依赖项保存到 package.json 时,还有两个额外的可选标志: | ||
--save-exact | -E | 保存的依赖项将被配置为一个确切的版本,而不是使用 npm 的默认 semver 范围操作符 |
--save-bundle | -B | 保存的依赖项也将添加到您的bundleDependencies列表中 |
-
npm install <name>@<tag>:安装指定标签引用的包版本
-
npm install <name>@<version>:安装指定版本的包
-
npm install <name>@<version range>:安装与指定版本范围匹配的软件包版本
-
npm install <git repo url>:从托管的git提供程序安装包,使用git克隆它。对于完整的git远程url,只尝试该url。
-
<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
-
<protocol>是以下之一git,git+ssh,git+http,git+https,或 git+file
-
例子:
npm install git+ssh://git@github.com:npm/cli.git#v1.0.27 npm install git+ssh://git@github.com:npm/cli#semver:^5.0 npm install git+https://isaacs@github.com/npm/cli.git npm install git://github.com/npm/cli.git#v1.0.27 GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/cli.git
-
-
npm install <tarball file>:安装位于文件系统上的软件包。注意:如果您只想将 dev 目录链接到您的 npm 根目录,您可以使用npm link。
-
例子:
npm install ./package.tgz
-
-
npm install <tarball url>:
获取 tarball url,然后安装它。为了区分这个选项和其他选项,参数必须以“http://”或“https://”开头-
例子:
npm install https://github.com/indexzero/forever/tarball/v0.5.6
-
-
npm install <folder>
:将包安装在目录中作为当前项目中的符号链接。它的依赖项将在链接之前安装。如果
<folder>
位于项目的根目录中,它的依赖项可能会node_modules
像其他类型的依赖项一样被提升到顶层。
npm uninstall 卸载模块
例子:
npm uninstall sax
npm uninstall
采用 3 个独占的、可选的标志来保存或更新主 package.json 中的包版本:
-
-S, --save
:包将从您的dependencies
中删除。 -
-D, --save-dev
:包将从您的devDependencies
中删除。 -
-O, --save-optional
:包将从您的optionalDependencies
中删除。 -
--no-save
: 包不会从您的package.json
文件中删除。
此外,如果你有,npm-shrinkwrap.json
那么它也会被更新。
范围是可选的,并遵循npm-scope
.
例子:
npm uninstall sax --save
npm uninstall @myorg/privatepackage --save
npm uninstall node-tap --save-dev
npm uninstall dtrace-provider --save-optional
npm uninstall lodash --no-save
npm view 查看npm包信息
npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]
别名: info, show, v
npm ls 查看安装的模块
npm init 在项目中引导创建一个package.json文件
生成一个pakeage.json文件,这个文件主要是用来记录这个项目的详细信息的,它会将我们在项目开发中所要用到的包,以及项目的详细信息等记录在这个项目中
npm init [--force|-f|--yes|-y|--scope]
npm init <@scope> (same as `npx <@scope>/create`)
npm init [<@scope>/]<name> (same as `npx [<@scope>/]create-<name>`)
我在这里详细讲述了package.json: npm(二):剖析 package.json_五虎战画戟-CSDN博客
npm root 查看包的安装路径
输出 node_modules的路径
npm root 输出当前项目node_modules的路径
npm root -g 输出全局node_modules的路径
npm config 管理npm的配置路径
将配置键设置为该值。如果value被省略,则将其设置为“true”。
npm config set <key> <value> [-g|--global]
获取配置键值
npm config get <key>
删除配置项
npm config delete <key>
显示所有配置设置。使用-l也显示默认值。用于--json 以 json 格式显示设置。
npm config list [-l] [--json]
在编辑器中打开配置文件。使用该--global标志编辑全局配置。
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]
别名: c
例子:
设置npm的registry
- npm 原地址:npm config set registry https://registry.npmjs.org
- 设置淘宝 npm 镜像:npm config set registry https://registry.npmmirror.com
- 临时修改 npm 源:npm install module_name --registry https://registry.npmmirror.com
npm cache 管理模块的缓存
npm cache add <tarball file>
npm cache add <folder>
npm cache add <tarball url>
npm cache add <name>@<version>
清除npm本地缓存
npm cache clean [<path>]
简写: npm cache clear, npm cache rm
npm cache verify
清除npm本地缓存 npm cache clean
清除 npx 缓存 npx clear-npx-cache
npm adduser(npm login)用户登录
输入npm账号、密码、邮箱登录
npm logout 用户退出登录
npm whoami 显示 npm 用户名
npm link 在本地生成npm 模块链接
npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]
简写: npm ln
cd ~/projects/node-redis # 进入一个项目,package.json中 name: 'redis'
npm link # 1,本地创建一个全局包链接
cd ~/projects/node-bloggy # 打开一个其他项目
npm link redis # 2,将一个本地包安装当前项目的node_modules下面
npm link分两步过程
- npm link在包文件夹中将在全局文件夹{prefix}/lib/node_modules/<package>中创建一个符号链接,该符号 链接链接到npm link执行命令的包。(prefix的值请参见npm-config)。它还会将包中的任何 bin 链接到{prefix}/bin/{name}.
- 在其他位置,npm link package-name将创建从全局安装package-name到node_modules/ 当前文件夹的符号链接。
请注意,package-name
取自package.json
,而不是来自目录名称。
包名称可以选择性地以范围为前缀。见npm-scope
。范围必须以@-符号开头,后跟斜杠。
创建 tarball 时npm publish
,链接的包通过解析符号链接“快照”到它们的当前状态。
这对于安装您自己的东西非常方便,这样您就可以对其进行处理和迭代测试,而无需不断重建。
npm link 报错时可查看这里解决
解决全局安装包时的 EAC CES 权限错误
verdaccio
本地开发时,使用 verdaccio 作为测试使用的本地 npm 私服。
# 1. 在发布 npm 前可以在本地私服进行测试。 启动本地私服:
npm run verdaccio
#2. 启动成功后在浏览器中访问 http://localhost:4873/
#3. 如果初次使用,需要创建用户
npm addUser --registry http://localhost:4873/
#4. 发布组件库到本地私服中:
npm publish --registry http://localhost:4873/
#5. 安装测试组件库
npm i xxx --registry http://localhost:4873/
npm publish 发布模块
npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>] [--otp otpcode] [--dry-run]
如果没有指定参数,则发布当前目录
如果没有指定tag,则设置tag为'latest'
发布包时注意点:
- npm login
- package.json name存在,并且在npmjs.com没有重名包或相似名称的包。例如:由于
react-native
已经存在,react.native
、reactnative
都不可以再创建。 -
package.json version存在,并且版本没有重复
-
版本遵循语义化标准
-
执行 npm publish --tag beta 可发布beta版本
npm unpublish 从注册表中删除一个包
npm unpublish [<@scope>/]<pkg>[@<version>]
警告:删除其他人依赖的库版本通常被认为是不良行为!
如果您的目的是鼓励用户升级,请考虑使用此命令 npm deprecate
。
npm deprecate 作废指定包的指定版本
npm deprecate <pkg>[@<version>] <message>
此命令将更新 npm 注册表中指定包所对应的数据条目, 为尝试安装它的所有人提示版本作废的警告信息(如:警告:此项目已重命名为NewProjectName,使用NewProjectName来安装)。
它适用于 版本范围 以及指定版本,因此你可以执行以下操作:
npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"
你也可以参阅 npm 的取消发布政策了解更多信息。
npm version
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]
'npm [-v | --version]' to print npm version
'npm view <pkg> version' to view a package's published version
'npm ls' to inspect current package/dependency versions
运行 npm version 它还将创建一个版本 commit 和 tag 。如果工作目录不是干净的,它将失败,除非设置了-f或——force标志。
本地的tag应该通过 git push --tags 推送至远程。
example:
"scripts": {
"preversion": "npm test",
"version": "npm run build && git add -A dist",
"postversion": "git push && git push --tags && rm -rf build/temp"
}
1、了解version
1.0.0-0
主版本号(major).次版本号(minor).修订号(patch)-预发布号(release)
优先级以此递减,每次修改前1面版本号都会影响后面版本号,所以谨慎操作
1、版本格式:主版本号、次版本号、修订号
2、版本号递增规则如下:(例如:原本的项目是 1.0.0 版本的话)
主版本号:当你做了不兼容的 API 修改,此情况版本应该为 2.0.0
次版本号:当你做了向下兼容的功能性新增,此情况版本应该为 1.1.0
修订号:当你做了向下兼容的问题修正。此情况版本应该为 1.0.1
3、通过 npm version <update_type> 自动改变版本
update_type 为 major、minor、patch 其中之一,分别表示大改,小改,补丁。
例如: $ npm version minor v2.0.0
2、初始化项目 npm init
{
"name": "npm-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
3、查看项目版本信息,默认1.0.0 npm version
{
'npm-test': '1.0.0',
npm: '6.14.12',
ares: '1.16.1',
brotli: '1.0.9',
cldr: '37.0',
http_parser: '2.9.4',
icu: '67.1',
llhttp: '2.1.3',
modules: '72',
napi: '8',
nghttp2: '1.41.0',
node: '12.22.1',
openssl: '1.1.1k',
tz: '2019c',
unicode: '13.0',
uv: '1.40.0',
v8: '7.8.279.23-node.46',
zlib: '1.2.11'
}
4、执行命令,升级版本号
命令 | 作用 | 执行结果version |
npm version prerelease | 升级预发布号 | 首次执行 1.0.0 -> 1.0.0-0 再次执行 1.0.0 -> 1.0.0-1 |
npm version prerelease --preid=alpha | 升级预发布号alpha版本 | 1.0.0 -> 1.0.1-alpha.1 1.0.1-alpha.1 -> 1.0.1-alpha.2 |
npm version prerelease --preid=beta | 升级预发布号beta版本 | 1.0.0 -> 1.0.1-beta.1 1.0.1-beta.1 -> 1.0.1-beta.2 |
npm version prepatch | 升级修订号,保留预发布号 | 1.0.0-1 -> 1.0.1-1 |
npm version preminor | 升级次版本号,保留预发布号 | 1.0.1-0 -> 1.1.0-0 |
npm version premajor | 升级主版本号,保留预发布号 | 1.1.0-0 -> 2.0.0-0 |
npm version patch | 升级修订号 | 首次执行 2.0.0-0 -> 2.0.0 再次执行 2.0.0 -> 2.0.1 |
npm version minor | 升级次版本号 | 2.0.1 -> 2.1.0 |
npm version major | 升级主版本号 | 2.1.0 -> 3.0.0 |
5、测试版本
alpha(内测版本)
alpha 是内部测试版,由于功能亦未完善,一般不向外发布,会有很多 Bug,除非你也是测试人员,否则不建议使用。alpha 是希腊字母的第一位,表示最初级的版本,alpha 是 α,beta 就是 β,alpha 版就是比 beta 还早的测试版。
所以,它是整个软件发布周期中的第一个阶段。
beta(灰度版本)
该版本相对于 α 版已有了很大的改进,消除了严重的错误,但还是存在着缺陷,需要经过多次测试来进一步消除。bate 版本最早对外公开的软件版本,会收集使用者的反馈意见,以便作为进一步修正软件的参考,这个阶段的版本会一直加入新的功能和特性。
rc(release candidate 候选版本)
candidate 是候选人的意思,用在软件上就是候选版本,release candidate 就是发行候选版本。和 beta 版最大的区别在于 beta 阶段会一直加入新的功能或特性,但是到了 rc 版本,几乎就不会加入新的功能了,而主要着重于除错。rc 版本是最终发放给用户的最接近正式版的版本,修复完已知 bug 后就是正式版了,也就是正式版之前的最后一个测试版。
release(最终版本)
该版本意味 “最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本。该版本有时也称为标准版。一般情况下,release 不会以单词形式出现在软件封面上,取而代之是符号(R)。
执行 npm view react versions 可以看到 react 的所有版本号
6. 版本标识符
- ^ 会锁定依赖包的主版本号,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
- ~ 会锁定依赖包的次版本号,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
- 没有标识符标识锁定当前版本,比如1.2.3只会依赖1.2.3版本
- * 这意味着安装最新版本的依赖包
-
> 大于某个版本,表示只要大于这个版本的安装包都行
例如:"node": "> 4.0.0" -
>= 大于某个版本,表示只要大于或等于这个版本的安装包都行
例如:"node": ">=8.9", -
< 小于某个版本,表示只要小于这个版本的安装包都行
例如:"http-proxy-middleware": "<0.17.3"
<= 小于或等于某个版本,表示只要小于或等于这个版本的安装包都行
例如:"http-proxy-middleware": "<=0.17.3"
npm dist-tag
# 将某个版本与某个tag关联
npm dist-tag add <pkg>@<version> [<tag>]
# 取消某个版本与某个tag的关联
npm dist-tag rm <pkg> <tag>
# 列出将包的所有版本与tag的关联关系
npm dist-tag ls [<pkg>]
# 别名
aliases: dist-tags
简单说:npm dist-tag 可以支持你管理一些 “别名标签”,并将它们和某个版本号关联起来。
比如,vue 这个众所周知的库就有9个 dist-tag:
beta : 灰度测试版本,当前匹配3.2.34-beta.1
latest :3.2.37 最新正式版
next :3.2.36 下一代版本(在vue4出来前暂时没啥用了)
preview :3.0.3 预览版
csp:内容安全版本
legacy:历史稳定版
v2-alpha:vue2 的内测版
v2-beta:vue2 的灰度版
v2-latest:vue2 的最新正式版
组件库时,可以通过以下命令标注出该工程的 latest 版本:
npm dist-tag add my-npm-test@1.0.0 latest
这样一来,my-npm-test@latest 就能命中 1.0.0 版本啦~
npm access 设置已发布包的访问级别
对于所有子命令,npm access
如果没有包名称传递给子命令,将对当前工作目录中的包执行操作。
# 将包设置为可公开访问或受限。
npm access public [<package>]
npm access restricted [<package>]
# 添加或删除用户和团队对包具有只读或读写访问权限的能力。
npm access grant <read-only|read-write> <scope:team> [<package>]
npm access revoke <scope:team> [<package>]
# 显示用户或团队能够访问的所有包以及访问级别,只读公共包除外(它不会打印整个注册表列表)
npm access ls-packages [<user>|<scope>|<scope:team>]
#显示包的所有访问权限。将只显示您至少具有读取权限的包的权限。如果<user>传入,列表过滤只球队是用户恰好属于。
npm access ls-collaborators [<package> [<user>]]
# 使用$EDITOR
npm access edit [<package>]
npm owner 管理包所有者
npm owner add <user> [<@scope>/]<pkg>
npm owner rm <user> [<@scope>/]<pkg>
npm owner ls [<@scope>/]<pkg>
简写: author
管理已发布包的所有权。
- ls:列出所有有权修改包和推送新版本的用户。当您需要知道向谁寻求帮助时非常方便。
- add:添加一个新用户作为包的维护者。此用户可以修改元数据、发布新版本和添加其他所有者。
- rm:从包所有者列表中删除用户。这会立即撤销他们的特权。
欢迎 关注、点赞、评论!━(*`∀´*)ノ亻!