前言
上一篇 npm入门(一)—了解基本组成与概念 简单介绍了一下npm的相关知识,这篇可以说是npm的核心知识。
分类
关于pacakge,是有分为public pacakge(公共包)、private pacakge(私有包)。前面我们也知道npm账号也有两种,一直的免费用户,一个是付费用户。私有包是付费用户才能发布的。
直观地,在npn website上看,package前面会有个标签标注该包是公有的还是私有的
scopes
在此之前,我们先了解这么一个概念——scopes(中文意思是作用域)。我们在注册npm账号和创建组织时,你将被授予一个与你的用户或组织名称匹配的范围,即你获得了一个适用范围(scope),这个范围是你的用户名或者创建的组织名。你可以将此范围用作相关包的命名空间。如你有一个package名叫mypackage,你的用户名为myusername,则你可以把这个package放到你的域里
@myusername/mypackage
这样有什么作用呢?
- 避免与别人的包重名,发生冲突。
- 限制该包的访问权限。假设你是付费用户,想要创建一个私有包,那么可以在你的域里授权哪些用户才能访问
public package
默认地,如果我们不对registry进行了任何设置,那么发布的包就是基于默认的registry(http://registry.npmjs.org)的,发布出来的包是公共的,任何人都可以访问使用。
public package也有两种:
- unscoped package:这个就是普通的共用包了,没有指定范围
- scoped package:这个是在划分了范围的包,默认是私有的,但是手动转化为共有的。
private package
私有包,只有付费用户才能创建。私有包,是指只有授权用户才能进行下载发布等管理,而且还能指定各种权限,例如只读只写之类的。
私有包肯定是指定了范围的(scoped),默认地,指定了范围的包都是私有包(当然后面可以手动更改)
私有包可以划分两种
- 用户范围的私有包:只能由你和你授予读或读/写访问权限的协作者访问。
- org(组织)范围的私有包:只能被授予读或读/写访问权限的团队访问。
包类型的转换
上面我们知道包的一些分类,那么,如何在需要时改变它们的类型呢?
公有转私有
在npm website上操作的方法就不说了,直接说敲命令的方式:
npm access restricted
替换为真实包名
私有转公有
在npm website上操作的方法就不说了,直接说敲命令的方式:
npm access public
替换为真实包名
需要注意的是,只有是付费用户才能转为私有。
私有包授权用户
私有包有时候为了协作,需要添加其他开发者进行一起管理,所以需要把私有包授权给某些用户。根据私有包类型
用户私有包
在npm website上操作的方法就不说了,直接说敲命令的方式:
npm owner add
组织私有包
要授予npm用户对私有组织包的访问权,您必须有一个组织所有者将它们添加到您的组织中,然后将它们添加到有权访问私有包的团队中。具体步骤参考 这里
创建package
说了那么多,是时候应该知道,如何创建一个package了。
进入你想要创建package的文件夹根目录中,运行以下命令
npm init
进行npm项目(package)的初始化,当运行这个命令后,会出现一个问卷,例如问你项目的名称,作者,描述等信息,你按照实际情况输入回应即可。填完问卷后,会在该目录下生成一个package.json文件,该文件里包含刚回应问卷的一些信息。
如果你懒得一个个回应,可以使用默认的情况,运行
npm init --y 或者 npm init --yes
这样会自动根据你当前目录的情况,生成一系列默认信息在package.json文件。
当然我们也可以设置一些init时的固定指定信息,如
npm set init.author.name xxxx
npm set init.author.email xxxx
这里就设定了init时固定作者信息是啥
如果你想创建的是指定域的包,那么运行
npm init --scope=@yourscopename
yourscopename替换成你想要起的域的名称
package.json
上一篇我们说过,package是由一个package.json文件描述组织起来的,所以这个文件至关重要。先大概看一下这个文件长哪样
{
"name": "xxxx