主题
npm 发包
发布包
注册 npm 账号
登录 npm
bashnpm login # 检查当前登录用户 npm whoami
发布包
bashnpm publish
提示
- 查看:在发布包之前,可以通过
npm publish --dry-run
来查看将要发布的包内容,避免发布错误。 - 测试:如果发包之前,需要先测试,可以使用
npm pack
打包,然后在其他项目中安装。 - 钩子:在发布包之前,可以通过
npm run prepublishOnly
来执行一些操作,比如:构建。
取消发布包
bash
npm unpublish [packagename]--force
标记弃用
bash
npm deprecate <package-name>@<version> "<message>"
隐藏源码
在发布 npm 包时,你可以通过以下几种方法来确保密钥文件不被包含在发布包中:
使用
.npmignore
文件:在项目根目录下创建一个
.npmignore
文件,并在文件中列出你不希望包含在 npm 包中的文件或目录。比如:plaintextsecret-key-file.txt config/secret/
.npmignore
文件的语法与.gitignore
类似。它会告诉 npm 哪些文件或目录在发布时应该被忽略。使用
files
字段:在
package.json
文件中,可以使用files
字段来指定应该包含在 npm 包中的文件和目录。其他未列出的文件将被排除。比如:json{ "name": "your-package-name", "version": "1.0.0", "main": "index.js", "files": ["index.js", "lib/"] }
这样,只有
index.js
和lib
目录会被包含在发布的 npm 包中。使用
npm publish
命令时的--ignore-scripts
选项:发布包时,可以使用
--ignore-scripts
选项来忽略指定的脚本,例如:bashnpm publish --ignore-scripts
通过
.gitignore
自动生成.npmignore
:如果你的项目已经有一个
.gitignore
文件,可以通过以下命令自动生成一个.npmignore
文件:bashcp .gitignore .npmignore
这样,
.gitignore
文件中列出的所有文件和目录也会被 npm 忽略。
发包时 package.json 常见配置
name
: 包名。- 必须是唯一的(在 npm 仓库中),若重名,可以使用
@vfanlee/xxx
作为包名 - 小写,不能包含空格。
- 可以使用短横线(
-
)或下划线(_
)。 - 不能包含不安全字符。
- 必须是唯一的(在 npm 仓库中),若重名,可以使用
description
: 包的描述。keywords
: 包的关键字。version
: 版本号。type
: 指定包的类型,module
表示 esm 包,commonjs
表示 cjs 包。main
: 指定包的入口文件。module
: 指定包的 esm 入口文件。types
: 指定包的类型文件。files
: 指定包的文件。exports
: 指定包的导出文件。json{ "exports": { ".": { "import": "./index.js", "require": "./index.umd.js" } } }
import
: 指定包的 esm 入口文件。require
: 指定包的 cjs 入口文件。
license
: 包的许可证。peerDependencies
: 指定依赖包的版本。
本地测试
npm link
- 进入包目录
bash
cd /path/to/your/package
- 全局链接包
bash
npm link
# 卸载
npm unlink -g
- 在其他项目中进行 link 测试
bash
npm link xxx
# 卸载
npm unlink xxx
npm pack
- 打包
bash
npm pack
- 在其他项目中安装
bash
npm install /path/to/xxx-1.0.0.tgz
提示
在 package.json 中,可以通过 prepack
钩子来执行一些操作,比如:构建。
常见问题
包重名
当心
You do not have permission to publish "xxx"
修改 name
字段,使用 @vfanlee/xxx
作为包名:
json
{
"name": "@vfanlee/xxx"
}
私有包
当心
You must sign up for private packages
加上前缀,默认认为是私有包,需要付费,可以将权限设置为公开
bash
npm publish --access public
版本相同
当心
You cannot publish over the previously published versions
发包不能版本相同,需要提升版本
bash
npm version patch # 补丁版本,最后一位数加1
npm version minor # 增加了新功能 中间的数字加1
npm version major # 大改动,不向下兼容 第一位数字加1