作为一个前端,每个人应该对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包的实际操作过程。
相关文章:
1.《npm发布包教程(一):从npm说起》
2.《npm发布包教程(二):发布包》
3.《npm发布包教程(三):安装发布包》
4.《npm发布包教程(四):迭代》
5.《npm发布包教程(五):废弃/删除》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。