【每天学习一点点 day05】工程化 重新认识npm 02_包(package.json)的概念、模块(node_modules)、范围(scoped

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

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 注册表来托管仅对您和选定的协作者可见的代码,从而允许您在项目中管理和使用私有代码以及公共代码。

私有包总是有一个范围,而范围包默认是私有的。

4.3. npm包的范围、访问级别和可见性

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值