1. 包package
About packages and modules | npm Docs (npmjs.com)
1.1. package package.json包的描述性文件
- A package is a file or directory that is described by a package.json file.
包是由 package.json 文件描述的文件或目录。
- A package must contain a package.json file in order to be published to the npm registry.
包必须包含 package.json 文件才能发布到 npm 注册表。
被npm管理的包必须含有package.json这个文件,否则npm无法识别这是个npm包
例如:
①在新项目中创建一个test空的文件夹
②在test空的文件夹中,执行npm install axios,看看能不能直接安装在test文件夹中
③结果发现,npm install没有在test中安装axios,而是沿着路径向上找到第一个含有package.json的文件夹,在当前目录中执行npm install axios
1.2. pacakge scoped包的作用范围(见下面3,4)
Packages can be unscoped or scoped to a user or organization, and scoped packages can be private or public. For more information, see "Creating a package.json file".
包是由 package.json 文件描述的文件或目录。包必须包含 package.json 文件才能发布到 npm 注册表。有关创建 package.json 文件的更多信息,请参阅 "创建 package.json 文件"。
Packages can be unscoped or scoped to a user or organization, and scoped packages can be private or public. For more information, see
- "About scopes
- "About private packages
- "Package scope, access level, and visibility
1.3. package format包的一般格式
2. 模块module
About packages and modules | npm Docs (npmjs.com)
2.1. node module和node_modules
node_modules是存放node module的文件夹
模块是 node_modules 目录中可以被 Node.js require() 函数加载的任何文件或目录。
要由 Node.js require() 函数加载,模块必须是以下之一:
- 包含 package.json 文件的文件夹,其中包含 "main" 字段。
- 一个 JavaScript 文件。
注意:由于模块不需要有 package.json 文件,因此并非所有模块都是包。只有具有 package.json 文件的模块也是包。
在 Node 程序的上下文中,module 也是从文件加载的东西。例如,在以下程序中:
var req = require('request')
我们可以说"The variable req refers to the request module"。
node_modules中的module模块不是必须含有package.json这个文件
不过由于node_modules中安装的基本都是从npm registry下载下来的包,而npm registry管理的包都有package.json,所以一般node_modules中下载的模块都是一个一个的package包。
3. 包的范围 scoped
About scopes | npm Docs (npmjs.com)
npm package scope, access level, and visibility | npm Docs (npmjs.com)
3.1. 包的范围是什么
当您注册 npm 用户账户或创建组织时,您将获得与您的用户或组织名称匹配的范围。您可以将此范围用作相关包的命名空间。
如果你也想创建一个包,包名叫lodash,npm为了避免冲突,你可以使用@scoped-name/lodash来命令你的lodash包
例如:我可以发布一个名称叫做 @yongzl/lodash 的npm包
3.2. 范围的作用是什么
范围允许您创建与其他用户或组织创建的包同名的包,而不会发生冲突。
当在 package.json 文件中列为依赖项时,范围包的前面是它们的作用域名称。范围名称是 @ 和斜杠之间的所有内容
@vue/cli 范围为:vue
@npm/packageA 范围为:npm
3.3. 范围和可见性
- 无范围的包总是公开的。
- 例如:lodash 就是一个无范围的公开包
- 私有包 始终是有范围的。(私有包不会在npm registry公开,无法搜索到一个私有包)
- 范围包默认是私有的;您必须在发布时传递命令行标志才能将它们公开。
- 例如:@vue/shared 就是一个①有范围的②组织的(vue)③公开包
- 例如:@antfu/utils 就是一个①有范围的②个人的(antfu)③公开包
4. 公共包与私有包 public和private
About public packages | npm Docs (npmjs.com)
About private packages | npm Docs (npmjs.com)
4.1. 公共包
作为 npm 用户或组织成员,您可以创建和发布任何人都可以下载并在自己的项目中使用的公共包。
- 无范围的 公共包存在于全局公共注册表命名空间中,可以在 package.json 文件中单独使用包名进行引用:package-name。
- 有范围的 公共包属于用户或组织,当作为依赖项包含在 package.json 文件中时,必须以用户或组织名称开头:
- @username/package-name
- @org-name/package-name
4.2. 私有包
要使用私有包,您必须
- 使用 npm 2.7.0 或更高版本。要升级,请在命令行上运行
npm install npm@latest -g
- 有一个付费用户或组织账户
使用 npm 私有包,您可以使用 npm 注册表来托管仅对您和选定的协作者可见的代码,从而允许您在项目中管理和使用私有代码以及公共代码。
私有包总是有一个范围,而范围包默认是私有的。
- 用户范围的私有包只能由您和您授予读取或读/写访问权限的协作者访问。有关详细信息,请参阅 "将协作者添加到用户账户拥有的私有包中
- 组织范围的私有包只能由已被授予读取或读/写访问权限的团队访问。有关详细信息,请参阅 "管理团队对组织包的访问