node包管理,node.js 打包
本文带你了解Node.js的包管理工具:包和NPM。希望对你有帮助!
node.js速度课程简介:进入学习
包与NPM
Node组织了自己的核心模块,也使得第三方文件模块的编写和使用有条不紊。[推荐研究:《nodejs 教程》]
但是在第三方模块中,模块之间的hash依然无处不在,相互之间不能直接引用。
所以在模块之外,包和NPM是链接模块的机制。
包装组织模块示意图
CommonJS的包规范定义其实很简单,由包结构和包描述文件组成。
包结构
用于组织包中的各种文件。它是一个归档文件,也就是说,一个目录在中直接打包为一个文件。zip或tar.gz格式。
符合包目录:
包描述文件
Bin:用于存储可执行二进制文件的目录。
Lib:用于存储JavaScript代码的目录。
Doc:用于存储文档的目录。
测试:用于存储单元测试用例的代码。
package.json包描述文件
NPM所有行为都与包描述文件的字段密切相关。
一些字段:
名称:包名。规范需要由小写字母和数字组成,不允许有空格。包名必须唯一,以免发布时出现重名冲突。
描述:包装介绍
版本:版本号,《Node.js学习(一)——简介》中也提到了它的介绍。
关键词:关键词数组,在NPM主要用于分类搜索。
维护者:包维护者列表。每个维护者由三个属性组成:姓名、邮箱和web。NPM通过该属性验证权限。
格式:
Maintainers: [{name :空城计, email: 111 @。 com , web :[http:](https://blog.csdn.net/QQ _ 36171287) }]投稿人:投稿人列表
bug:可以反馈bug的网址或电子邮件地址。
Licenses:当前软件包使用的许可证列表,指明软件包在哪些许可证下使用。
格式:
许可证:[{ type: GPLv2 , url: }]
//或者
许可证: ISC 储存库:存放源代码的位置列表,指明可以使用哪些方式和地址来访问软件包源代码。格式:
存储库:{
键入: git ,
URL : git https://github.com/kongchengji/UiSelfMade.git
},依赖关系:使用当前包所需要依赖的包列表.这个属性非常重要。
主页:当前包的网址
Os:操作系统支持该列表。如果列表为空,将不会对操作系统做出任何假设。
Cpi: CPU架构支持列表
引擎:支持的JavaScript引擎列表
目录:包目录描述
实现:实现规范的列表。标记当前包实现了哪些CommonJS规范。
脚本:脚本描述对象。主要由包管理器用来安装、编译、测试和卸载包。
格式:
脚本:{
dev : web pack-dev-server-inline-progress-config build/web pack . dev . conf . js ,
开始: npm运行开发,
lint: eslint - ext。js,vue src ,
build :节点build/build.js
},NPM和包装规格之间的区别在于有四个附加字段:
作者:包作者:ok_man:
Bin:有些包作者希望包可以作为命令行工具使用。
Main:当一个模块被引入到一个包中时,这个字段将以一种有限的方式被检查,并被用作包中其他模块的入口模块。如果不存在,require将在包目录中查找index.js、index.node和index.json作为默认条目。
DevDependencies:有些模块只需要在开发过程中依赖。
DevDependencies:开发环境中使用的依赖项:生产环境中使用的依赖项
前后端共用模块
JavaScript在Node出现后有了优势——部分模块可以前后端共享。
但是前后端还是有些区别的:汗_滴:
前后端模块侧重点
前后JavaScript分别放在HTPP的两端,扮演不同的角色。
浏览器端的JavaScript需要从同一个服务器端分发到多个客户端执行。瓶颈是带宽。从网络加载代码的服务器端的JavaScript需要对相同的代码执行多次。瓶颈是从磁盘加载的CPU、内存等资源。
在前端JavaScript中,主要使用AMD规范。
CommonJS并不完全适用于前端JavaScript。比如Node的模块引入基本是同步的,但是如果前端引入采用同步引入,UI在初始化过程中需要花费大量时间等待脚本加载。
AMD规范
AMD规范是CommonJS规范的扩展,全称是异步模块定义。
是异步模块定义。
模块定义:define(id?依赖关系?工厂);
Id是模块的名称,这是一个可选参数。
Dependencies指定要依赖的模块列表,它是一个数组和一个可选参数。
AMD在声明模块时需要指定所有的依赖关系,并通过形式参数将依赖关系传递到模块内容中:
定义([。/a ,。/b],函数(dep1,dep2) {
a.doSomethimg()
doSomething()
});
CMD规范
与AMD规范相比,有CMD规范,全称是CommonModule定义。
是一个通用的模块定义。
这是国内的于波(也是大人物)提出来的。
模块定义:定义(工厂)
CMD支持动态引入:
定义(功能(要求、导出、模块){
var a=require(。/a’)
a.doSomethimg()
var b=require(。/b’)
doSomething()
})需要依赖模块的时候,随时调用require()引入。
CMD主张依靠邻近性;AMD主张依靠优势。
CMD是延迟执行;AMD正在提前执行。
CMD性能好,因为只在用户需要的时候执行;AMD用户体验好,因为没有延迟,依赖模块提前执行。
AMD和CMD最大的区别就是依赖模块的执行时序不同。
兼容多种模块规范
创建一个hello方法,可以在不同的运行环境下运行,兼容Node、AMD、CMD和常用浏览器。
在匿名函数前加一;这是个好习惯。name是方法名,definition是方法体。
按类型检查环境是AMD还是CMD还是节点环境。
可以把模块执行结果挂载在窗口变量中,这样就可以直接调用了。
有关编程的更多信息,请访问:编程视频!以上是Node.js中对包和NPM细节的深入分析请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。