描述

原文档地址: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配置的仓库。

相关文档

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

理解nodejs模块的scope的更多相关文章

  1. (转)深入理解JavaScript 模块模式

    深入理解JavaScript 模块模式 (原文)http://www.cnblogs.com/starweb/archive/2013/02/17/2914023.html 英文:http://www ...

  2. # nodejs模块学习: express 解析

    # nodejs模块学习: express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子 ...

  3. [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()

    译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...

  4. nodejs模块学习: webpack

    nodejs模块学习: webpack nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来解决现实 ...

  5. 理解前端模块概念:CommonJs与ES6Module

    前言 现代前端开发每时每刻都和模块打交道.例如,在项目中引入一个插件,或者实现一个供全局使用组件的JS文件.这些都可以称为模块. 在设计程序结构时,不可能把所有代码都放在一起.更为友好的组织方式时按照 ...

  6. NodeJS 模块开发及发布详解

    NodeJS 是一门年轻的语言,扩展模块并不太全,经常我们想用某个模块但是却找不到合适的.比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的 ...

  7. 从原理上理解NodeJS的适用场景

    NodeJS是近年来比较火的服务端JS平台,这一方面得益于其在后端处理高并发的卓越性能,另一方面在nodeJS平台上的npm.grunt.express等强大的代码与项目管理应用崛起,几乎重新定义了前 ...

  8. NodeJS模块、包、NPM

    1.NodeJS模块        每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件. a.模块的应用               新建一个文件mytest. ...

  9. 深入理解JavaScript 模块模式

    http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html 模块模式是JavaScript一种常用的编码模式.这是一般的 ...

随机推荐

  1. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  2. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  3. 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file

    我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...

  4. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  5. 屌丝giser成长记-大学篇

    作为一名屌丝giser的我,刚接触gis专业是2007年的大一,好悲催,当时gis这个专业是被调剂的,我压根都不知道gis为何物,那时候gis冷门的一逼,报名这个专业的寥寥无几.记得那时候得知被调剂到 ...

  6. android SystemServer.java启动的服务。

    EntropyService:熵(shang)服务,用于产生随机数PowerManagerService:电源管理服务ActivityManagerService:最核心服务之一,Activity管理 ...

  7. 安卓客户端a标签长按弹框提示解决办法

    昨天工作时候发现一个bug,是关于a标签的,在安卓客户端中,如果是a标签的话,长按会出现一个弹框,如图所示 是因为安卓客户端的长按触发机制,以后进行wap端开发的时候,如果用到跳转页面尽量不要用a标签 ...

  8. Atitit 软件工程概览attilax总结

    Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...

  9. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...

  10. OpenGL shader 中关于顶点坐标值的思考

    今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...