Skip to content

如何发布自己的npm包到npm公共仓库?

一、创建包目录(必须满足三个条件)

  1. 独占目录(该目录内只有包相关的东西)
  2. 根目录必须存在 package.json (可以通过npm init创建)
  3. package.json 有三个必填字段
    name 包名(全局唯一,全小写,不能和已经npm仓库内以及发布的重复)
    version 版本号(语义化,如 1.0.0)
    main 入口文件路径(require 时实际加载的文件)
  4. README.md文件(项目说明)
Joney/
├─ package.json
├─ index.js          // 统一导出
├─ README.md
└─ src/
   ├─ dateFormat.js
   └─ htmlEscape.js

二、示例Demo

js
//dateFormat.js  
function dateFormat(dateStr) {
  const dt = new Date(dateStr);
  const pad = n => (n > 9 ? n : '0' + n);
  return `${dt.getFullYear()}-${pad(dt.getMonth()+1)}-${pad(dt.getDate())} ${pad(dt.getHours())}:${pad(dt.getMinutes())}:${pad(dt.getSeconds())}`;
}
module.exports = { dateFormat };
js
//htmlEscape.js  
function htmlEscape(str) {
  return str.replace(/<|>|"|&/g, m =>
    ({'<':'&lt;','>':'&gt;','"':'&quot;','&':'&amp;'}[m]));
}
function htmlUnEscape(str) {
  return str.replace(/&lt;|&gt;|&quot;|&amp;/g, m =>
    ({'&lt;':'<','&gt;':'>','&quot;':'"','&amp;':'&'}[m]));
}
module.exports = { htmlEscape, htmlUnEscape };
js
//index.js(入口)
module.exports = {
  ...require('./src/dateFormat'),
  ...require('./src/htmlEscape')
};
json
// package.json 模板
{
  "name": "Joney",
  "version": "1.1.0",
  "main": "index.js",
  "description": "提供了格式化时间、HTMLEscape相关的功能",
  "keywords": ["itheima", "dateFormat", "escape"],
  "license": "ISC"
}

二、发布

  1. 注册账号 https://www.npmjs.com (自己的包可以在这里找到)

  2. 切到官方源

    bash
    npm config set registry https://registry.npmjs.org
  3. 登录

    bash
    //在项目根目录下运行
    npm login
  4. 发布

    bash
    //在项目根目录下运行
    npm publish

三、删除包(谨慎)

  • 只能在发布 72 小时内 删除
  • 删除后 24 小时内 禁止再次发布同名包
npm unpublish 包名 --force