描述

原文档地址:https://docs.npmjs.com/misc/scope

所有npm模块都有name,有的模块的name还有scope。scope的命名规则和name差不多,同样不能有url非法字符或者下划线点符号开头。scope在模块name中使用时,以@开头,后边跟一个/ 。package.json中,name的写法如下:

@somescope/somepackagename

scope是一种把相关的模块组织到一起的一种方式,也会在某些地方影响npm对模块的处理。

npm公共仓库支持带有scope的的模块,同时npm客户端对没有scope的模块也是向后兼容的,所以可以同时使用两者。

安装带有scope的模块

带有scope的模块安装在一个子目录中,如果正常的模块安装在node_modules/packagename目录下,那么带有scope的模块安装在node_modules/@myorg/packagename目录下,@myorg就是scope前面加上了@符号,一个scope中可以包含很多个模块。

安装一个带有scope的模块:

npm install @myorg/mypackage

在package.json中写明一个依赖:

"dependencies": {
"@myorg/mypackage": "^1.3.0"
}

如果@符号被省略,那么npm会尝试从github中安装模块,在npm install命令的文档中有说明 https://docs.npmjs.com/cli/install

require带有scope的模块

在代码中require一个含有scope的模块:

require('@myorg/mypackage')

nodejs在解析socpe模块的时候,并没有把它当做一个有什么蹊跷的东西来处理,仅仅是按照路径去找@myorg目录下的mypackage模块

发布带有scope的模块

带有scope的模块可以被发布到任意支持socpe模块的npm仓库,包括npm公共仓库,公共仓库从2015-04-19就开始支持带有scope的模块了。

如果有必要,可以把某个scope关联到某个仓库,见下面的说明。

如果要发布一个公共socpe模块,你必须在最开始发布的时候指定--access public。这样会让模块能被公开使用,就像在publish之后运行了 npm access public命令一样。

如果要发布私有模块,那么你必须有一个npm私有模块账户,可以选择自己搭建一个npm服务,或者直接使用官方的,官方的需要支付7刀/月。

发布私有模块的命令:

npm publish

或者

npm publish --access restricted 。

即发布socpe模块时,默认就是restricted的。
这些在npm publish文档里边可以看到详细说明。 https://docs.npmjs.com/cli/publish

将一个scope和一个仓库关联

scope可以和一些自己搞的npm仓库关联起来。这样你就可以同时使用npm公共仓库和一些其他的私有仓库中的模块,例如企业npm。
可以用npm login把scope关联到一个仓库:

npm login --registry=http://reg.example.com --scope=@myco

scope和仓库可以是一个多对一的关系:一个仓库里边可以放多个scope,但是一个scope同时只能放在一个仓库中。
也可以用npm config把scope关联到一个仓库:

npm config set @myco:registry http://reg.example.com

当一个scope关联到一个私有仓库之后,该scope下的模块在npm install的时候都会从它关联的仓库中获取模块,而不是npm配置的仓库,发布的时候也是同样的道理,会发布到它关联的仓库而不是npm配置的仓库。

相关文档

本文转自我的个人网站,原文地址,欢迎前往交流讨论

最新文章

  1. MYSQL数据库的优化
  2. WebLogic部署
  3. Jquery 自定义弹窗等待
  4. BZOJ3161 : 孤舟蓑笠翁
  5. Web Fram 2 for IIS7.X(Microsoft Web Farm Framework)
  6. COM编程之一 组件
  7. Mysql Not in有null值查询的问题
  8. 数据泵导出/导入Expdp/impdp
  9. api接口对于客户端的身份认证方式以及安全措施
  10. http服务 Web API的使用
  11. 两个java项目,跨域访问时,浏览器不能正确解析数据问题
  12. 【Centos】yum 安装mariaDB
  13. jmeter-fileupload操作使用说明
  14. DirectX--给视频加马赛克、字符OSD
  15. Java Json字符串转Java对象遇到属性大小写的问题解决
  16. 解决Caused by: java.lang.IllegalArgumentException: A universal match pattern ('/**') is defined before other patterns in the filter chain, causing them to be ignored. Please check the ordering in your
  17. Linux基础之常用命令整理(一)
  18. js中的模块化
  19. zabbix3.0对tcp连接数和状态的监控优化
  20. Java 基础 引用数据类型 ArrayList集合

热门文章

  1. EntityFramework Core Raw SQL
  2. 告别被拒,如何提升iOS审核通过率(上篇)
  3. 使用 JavaScriptService 在.NET Core 里实现DES加密算法
  4. Python高手之路【五】python基础之正则表达式
  5. Electron使用与学习--(基本使用与菜单操作)
  6. Laravel 5.x 请求的生命周期(附源码)
  7. 算法与数据结构(十五) 归并排序(Swift 3.0版)
  8. PHP-----文件系统的交互
  9. (一)开篇—杂谈WebGIS
  10. myeclipse 内存不够用报错PermGen space 和 An internal error has occurred.