共计 1416 个字符,预计需要花费 4 分钟才能阅读完成。
作为一个前端,每个人应该对 npm install 这个命令应该非常熟悉了,尤其是对这个命令执行过程中命令窗口疯狂输出肯定印象深刻。我发现有的同学对安装包轻车熟路,但对包从哪里来的以及如何发布一个 npm 并不是很了解,基于此,在团队内部做了一次分享,将分享过程整理如下,希望对每一个想发布自己的包但又不知从何开始的同学有所帮助。
由于发布包涉及到发布、安装、更新、删除 / 废弃等阶段,写在一篇文章中篇幅过长,决定拆开做成一个系列。今天第一篇首先介绍一下 npm 相关的一些知识。
npm(node package manager)
是一个辅助前端开发的包管理工具
包括:
网站:找包、注册用户
命令行:程序员与 npm 交互的主要形式
仓库:最大的 JavaScript 软件库
管理对象:包(package)
管理方式:
增(发布:npm publish;安装:npm i)
删(废弃:npm deprecate;卸载:npm rm)
改(更新:npm up)
查(搜索:npm s)
npm 中涉及到的主体主要有两个:package 和 module,定义如下:
package:含有 package.json 描述文件并发布到 npm 仓库的文件或者文件夹
module:在 node_modules 中,可以被 Node.js 的 require() 方法加载的任何文件或文件夹
可以这样理解:一个 JavaScript 软件,从本地发布到 npm 仓库时是 package,从 npm 仓库下载到本地时就变成了 module
另外,基于以上,可以看出 package 和 module 的关系:
module 不一定是 package(比如 node 内置模块),package 一定是 module
含 package.json 文件的 module 一定是 package
除了以上概念外,再分别看下两个主体中的细节部分:
package(包)
主要有两个重要的属性:
1.Scope(作用域,范围)
一旦注册个人或者团体账户,就获得了与个人或者团体名相匹配的 scope,可以用这个 scope 作为包的命名空间,例如 @yuyy、@58。
分类:
unscoped:例如 babel
scoped
user:例如 @yuyy/babel
org:@babel/parser
作用:为你自己发布的包提供命名空间,防止与他人的包名冲突
2.Accessibility(可访问性)
属性值有:
private:私有,仅作者本人或团队成员可见
public:公有,所有人可见
此属性和 github 创建仓库时设定访问性的策略一致:公有,所有人可见,免费;私有,仅自己可见,收费。
以上两个属性之间的关系如下:
需要说明的几点:
个人账户(User)可以创建和管理 Unscoped 的 package;团队账户(Org)相互只能管理 Scoped 的 package
Unscoped 总是 public
Private 的 package 总是 Scoped
Scoped 的 package 默认 Private,但需要付费,可以通过命令行改变其属性
module(模块)
下载到本地的 module 主要是用于在 node 环境被引用,为了能被 Node.js 的 require() 方法加载,module 必须是下列情况之一:
包含 package.json,且 package.json 中有 main 字段的文件夹
含有 index.js 的文件夹
JavaScript 文件
以上都是一些 npm 相关的知识,在下一篇《npm 发布包教程(二):发布包》中,我们开始演示发布 npm 包的实际操作过程。