NPM 包管理和发布

作者: 四爷在此 | 来源:发表于2019-09-21 17:49 被阅读0次

最近试着发布了一两个NPM包,一个是mapbox 的一些插件类,另一个是vudio,一个音频可视化的库。简单记录下NPM 包管理的一些操作,主要是发布包的一些概念和注意点

Vudio snapshot

关键字段

首先,我们得有一个有package.json 文件的文件夹,其中有几个关键字段需要注意。

NPM包nameversion 是必须的,version 得是符合semversion 规范的,也就是 major.minor.patch 三个数字组成,大版本小版本和patch。比如每次 npm publish 之前可以通过npm version minor 去自动增加一个小版本数字,会自动修改package.json 中的 version 值。也就是说最好不要手动改 package.json文件中的version 字段。

比如vudio 的版本号本来是 2.0.3

npm version minor
npm version
> { vudio: '2.0.4',
  npm: '5.5.1',
...
}

npm publish

main,browser 字段

以我的vudio 包package文件为例

// package.json of my NPM package Vudio
{
  "name": "vudio",
  "version": "2.0.4",
  "description": "visualization audio using AudioContext and Canvas",
  "main": "umd/vudio.js",  // 如果是esModule 或者node.js的包,把入口文件填这里
  "browser": "umd/vudio.js",  // 如果这个包针对浏览器环境,那填这里
  "files": [
    "umd",
    "*"
  ]
}

这几个字段比较有用,main字段标识了你 npm 包的入口,比如别人安装了我的包, 在 nodejs 程序中 require 我导出的模块对象,实际上就会去packge.json中查找 main 字段,到底指的是哪个js 文件

var Vudio = require('vudio')
// 实际上等效于
var Vudio = require('vudio/umd/vudio.js')

通过require或者import引入NPM包时,是读取 main 字段来获取入口文件地址。这主要针对符合common.js和esModule 模块规范的第三方NPM 包。如果你要发布的NPM 包只能在 browser 环境下运行,比如要依赖 window,DOM这类浏览器环境下的要素。那可以直接给 browser 字段指定你的 umd 文件地址,也就是通用模块定义文件。

UMD 模块定义方式

这种导出模块的典型特征就是适配各种运行环境,不管是浏览器还是nodejs环境,都可以顺利导出模块,优雅适配

// 典型的umd 模块导出
(function(factory){
    if (typeof exports === 'object') {  // 支持Common.js 
         module.exports = factory();
    } else if (typeof define === 'function' && define.amd) {  // 支持AMD
         define(factory); 
    } else {
         window.Vudio = factory();   // 浏览器环境
    }

 })(function() {
    /// 你的功能
    function Vudio(){
    //// .....
    }
    return Vudio
})

这样 npm publish 之后就可以在npm仓库里查到你的包了。有个问题就是publish 之前得 npm login 下,另外要确保你的 package name 是全网唯一,不然会提示 403,没有权限提交。

提交给CDN

除了把NPM包发布给 官方仓库,还可以顺手提交给 https://unpkg.com/ 这样的 CDN 网站,实际上是Cloudflare 提供的CDN 服务。
主要做到两点:

  • 添加 umd (or dist) 文件夹到 .gitignore 文件中,也就是说在git repo 里面忽略这个用于发布包的文件夹
  • umd 文件夹地址添加到package.jsonfiles array 字段中

files字段指的是,你要把哪些文件、文件夹包含在NPM包里面。这样你 npm publish 的时候只会把这部分文件(通常是必要的,无个人数据的)打包 tgz 提交给npm 仓库。

配置完成后,npm publish 之后就可以在unpkg CDN 上查到自己的包了. 一般地址是
unpkg.com/:package@:version/:file

参考文档:

创建和发布NPM包的官方文档

相关文章

  • npm操作

    npm所有者管理: npm登录: npm查看用户信息: 发布(包): npm撤销发布的包: npm退出: 初始化n...

  • npm原理理解

    众所周知的概念 npm是一个包管理器。开发者使用npm命令从npm安装包、发布包,从而可以分享和复用代码balab...

  • 自定义npm包的创建、发布、更新和撤销

    大纲 1、准备2、自定义npm包3、发布自定义npm包4、引用npm包5、更新npm包6、撤销发布的npm包 博客...

  • npm介绍

    npm简介 npm是node的包管理工具,定义明确就是用来管理node的包,包括安装,卸载,更新,发布等 npm命...

  • npm常用指令

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。 npm init ...

  • npm包发布流程

    npm包发布流程 标签(空格分隔): Node.js npm包发布流程 注册npm账号 方式一:去npm官网注册 ...

  • 如何在npm发布一个包

    发布一个npm包 1 登录 npm 2 更新包版本号 3 发布 设置npm publish 时的发布文件(有时我们...

  • React Native 组件封装上传简单教程

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。通过npm可以很快的找到特定...

  • 发布npm包,删除npm包

    发布npm包 注册并在本机添加npm用户(已注册可忽略) 完成了上面的步骤之后,我们接下来要在www.npmjs....

  • node版本管理工具nvm和npm

    nvm的安装详解 nvm管理node版本,npm管理node包 npm的使用 npm安装和环境变量设置 安装npm...

网友评论

    本文标题:NPM 包管理和发布

    本文链接:https://www.haomeiwen.com/subject/jukeuctx.html