Skip to content

npm 发包

发布包

  1. 注册 npm 账号

  2. 登录 npm

    bash
    npm login
    
    # 检查当前登录用户
    npm whoami
  3. 发布包

    bash
    npm publish

提示

  • 查看:在发布包之前,可以通过 npm publish --dry-run 来查看将要发布的包内容,避免发布错误。
  • 测试:如果发包之前,需要先测试,可以使用 npm pack 打包,然后在其他项目中安装。
  • 钩子:在发布包之前,可以通过 npm run prepublishOnly 来执行一些操作,比如:构建。
temp

https://github.com/semantic-release/semantic-release

取消发布包

bash
npm unpublish [packagename]--force

标记弃用

bash
npm deprecate <package-name>@<version> "<message>"

隐藏源码

在发布 npm 包时,你可以通过以下几种方法来确保密钥文件不被包含在发布包中:

  1. 使用 .npmignore 文件:

    在项目根目录下创建一个 .npmignore 文件,并在文件中列出你不希望包含在 npm 包中的文件或目录。比如:

    plaintext
    secret-key-file.txt
    config/secret/

    .npmignore 文件的语法与 .gitignore 类似。它会告诉 npm 哪些文件或目录在发布时应该被忽略。

  2. 使用 files 字段:

    package.json 文件中,可以使用 files 字段来指定应该包含在 npm 包中的文件和目录。其他未列出的文件将被排除。比如:

    json
    {
      "name": "your-package-name",
      "version": "1.0.0",
      "main": "index.js",
      "files": ["index.js", "lib/"]
    }

    这样,只有 index.jslib 目录会被包含在发布的 npm 包中。

  3. 使用 npm publish 命令时的 --ignore-scripts 选项:

    发布包时,可以使用 --ignore-scripts 选项来忽略指定的脚本,例如:

    bash
    npm publish --ignore-scripts
  4. 通过 .gitignore 自动生成 .npmignore

    如果你的项目已经有一个 .gitignore 文件,可以通过以下命令自动生成一个 .npmignore 文件:

    bash
    cp .gitignore .npmignore

    这样,.gitignore 文件中列出的所有文件和目录也会被 npm 忽略。

发包时 package.json 常见配置

  • name: 包名。

    • 必须是唯一的(在 npm 仓库中),若重名,可以使用 @vfanlee/xxx 作为包名
    • 小写,不能包含空格。
    • 可以使用短横线(-)或下划线(_)。
    • 不能包含不安全字符。
  • 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: 指定依赖包的版本。

本地测试

  1. 进入包目录
bash
cd /path/to/your/package
  1. 全局链接包
bash
npm link

# 卸载
npm unlink -g
  1. 在其他项目中进行 link 测试
bash
npm link xxx

# 卸载
npm unlink xxx

npm pack

  1. 打包
bash
npm pack
  1. 在其他项目中安装
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

基于 MIT 许可发布