node包管理,node.js 打包

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: