理解nodejs模块的scope

描述

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

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

@somescope/somepackagenamegithub

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

npm公共仓库支持带有scope的的模块,同时npm客户端对没有scope的模块也是向后兼容的,因此能够同时使用二者。json

安装带有scope的模块

带有scope的模块安装在一个子目录中,若是正常的模块安装在node_modules/packagename目录下,那么带有scope的模块安装在node_modules/@myorg/packagename目录下,@myorg就是scope前面加上了@符号,一个scope中能够包含不少个模块。网站

安装一个带有scope的模块:ui

npm install @myorg/mypackageurl

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

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

若是@符号被省略,那么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配置的仓库。

相关文档

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

相关文章
相关标签/搜索