NPM 模块中的scope

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

"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

使用带有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服务,或者直接使用官方的。发布私有模块的命令:

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配置的仓库。

推荐阅读更多精彩内容

  • 我们通常通过 npm 来安装和使用开源的模块。但是,通常我们有些私有的模块,不想通过npm发布,但是又想在一些项目...
    wavesnow阅读 2,458评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 124,734评论 18 136
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 161,734评论 24 692
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey阅读 5,622评论 2 36
  • 明天清晨要赶最早一班的汽车,那样才能赶上火车 , 收拾东西的夜晚心绪总是复杂的,这一次尤其的强烈,说不出的惊慌失措...
    雾里的魂阅读 144评论 0 0
  • 病了很久,想的也挺多。 人的一生大抵如此:“你不能怕药苦就不去吃,你不能因为怕失败就不去尝试,你不能因为它现...
    姚智公阅读 102评论 0 0
  • 已经知道为何错过,就不要让机会再次溜走。 看到笑来老师在更新的文章旁边添加了黑线,想起一句歌颂老师的“春蚕到死丝方尽”。
    高平青少年生涯咨询师阅读 34评论 0 0
  • 能被破解方案 Android so库防客户端破解的解决方案 so层进行签名校验 android 签名验证防止重打包...
    CaiBird阅读 8,621评论 0 7
  • 最近很丧,很丧 毕业,以后的规划 朋友说我想的太多所以不快乐 我想要以后过得很好,很自在 其实有时想想快不快乐真的...
    我会发光啊idol阅读 63评论 0 0