# 一、package.json

下载任意一个 npm 包后,项目文件会自动生成如下的文件

  由于项目的包体积较大,不利于项目源码共享,所以要将node_modules文件夹添加到 Git 的.gitignore 忽略文件中

关于忽略文件,详细内容可以参考git 文档 (opens new window)

# 1、版本号 ✨

  关于 package.json 中包的版本号前缀标识符 version:

提示

  npm 包的版本通常是需要遵从 semver 版本规范 (opens new window)的。

包的版本号是以“点分十进制”形式进行定义的

# X:重大版本更新(可以参考vue2 --> vue3)
# Y:新功能、向下兼容
# Z:修复版本的bug
X.Y.Z

① 范围:

  • 任意版本*:对版本没有限制(一般不用)
  • 对比符号类的:>、>=、<、<=
  • 或符号||:可以用来设置多个版本号限制规则,例如 >= 3.0.0 || <= 1.0.0

② 固定:

  • 插入符号^:固定主版本号(默认方式)
  • 波浪符号~:固定主版本号和次版本号
  • 没有任何符号:必须使用当前版本号(=)

# 2、脚本

{
  "scripts": {
    // 可以直接使用 npm run start
    "start": "node ./src/main.js"
  }
}

# 3、证书

licence 略

# 二、npm 包

# 1、基本要求

  • 单独 存在于一个文件夹中
  • 顶级目录下必须包含 package.json
  • package.json 中必须包含 name、version、main 三个属性

当然 package.json 通常使用 npm init -y 自动生成

# 2、目录结构

  使用 require 调用包时,会首先找到包文件夹中的 package.json 中的 main 属性,然后转到相应的入口文件中

renutil
├─ src (核心功能)
|   ├─ dateFormat.js
|   └─ htmlEscape.js
├─ index.js  (入口文件)
├─ package.json
└─ README.md

# 三、开发 npm 包

# 1、包开发

开发个人包示例
  • index.js
// index.js文件为入口文件

// 导入模块化拆分的js文件
const date = require('./src/dateFormat')
const escape = require('./src/htmlEscape')

// 共享模块作用域
// module.exports = {
//   dateFormat,
//   htmlEscape,
//   htmlUnEscape,
// };
// 使用es6语法:—— 展开🚩运算符
module.exports = {
  ...date,
  ...escape
}
  • package.json
{
  "name": "renutil",
  "version": "1.0.0",
  "main": "index.js",

  "description": "格式化时间,HTML Escape功能",
  "keywords": ["lencamo", "dateFormat", "escape"],
  "license": "ISC",

  "homepage": "官网地址",
  "repository": {
    "type": "git",
    "url": "包github地址"
  }
}
  • src/dateFormat.js
// 一、格式化时间
function dateFormat(dtStr) {
  // 这个注意区别new Date()
  const dt = new Date(dtStr)
  const y = dt.getFullYear()
  const m = fixZero(dt.getMonth() + 1)
  const d = fixZero(dt.getDate())

  const hh = fixZero(dt.getHours())
  const mm = fixZero(dt.getMinutes())
  const ss = fixZero(dt.getSeconds())

  // 使用【模块🚩字符串】 来拼接
  // return `YYYY-MM-DD hh:mm:ss`;
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

// 自定义补零函数
function fixZero(n) {
  return n > 9 ? n : '0' + n
}

// 共享模块作用域
module.exports = {
  dateFormat
}
  • src/htmlEscape.js
// 二、HTML Escape功能
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, (match) => {
    switch (match) {
      case '<':
        return '&lt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}

function htmlUnEscape(str) {
  return str.replace(/&lt;|&gt;|&quot;|&amp;/g, (match) => {
    switch (match) {
      case '&lt;':
        return '<'
      case '&gt;':
        return '>'
      case '&quot;':
        return '"'
      case '&amp;':
        return '&'
    }
  })
}

// 共享模块作用域
module.exports = {
  htmlEscape,
  htmlUnEscape
}

# 2、包发布

  发布包之前要先注册 npm 账号 (opens new window)。发布包时,要在包的根目录下进行。

cd [包路径]

# nrm ls
# nrm use npm

npm login

# 包发布
npm publish

# 3、包删除

Refusing to delete the last version of the package. It will block from republishing a new version for 24 hours

# 包删除
npm unpublish xxx@x.x.x --force # --force强制删除
# 【默认情况下同一个包,其最后一个版本不可以直接删除,并且 24小时内不可以发布下一个版本】
更新于 : 7/8/2024, 10:21:14 AM