ECMAScript标准
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是javascript的一个标准,但实际上后两者是ECMA-262标准的实现和扩展。ECMAScript标准存在缺陷:
- 没有模块化系统(有模块化)
- 标准库少
- 没有标准接口
- 缺乏管理系统
CommonJS模块化
如果程序规模达到一定程度必须进行模块化。模块化可以是多种形式的,但至少提供能够将代码分割成多个源文件的机制。CommonJS的模块功能可以帮我们解决问题。
CommonJS规范的提出主要为了弥补当前js没有标准的缺陷。
CommonJS对模块化定义:模块引用、定义引用、标识引用。
在Node中,一个js文件就是一个模块。
模块引入代码示例
demo03.js
exports.x=19;
exports.fn=function(a,b){
}
demo04.js
var md = require("./demo03.js");
console.log(md.x);
console.log(md.fn);
执行结果
路径就是一种模块标识,通过模块标识找到模块标识模块分成核心模块(node引擎提供的模块)直接引名字文件模块(用户自己创建)。
当使用math模块的方法是直接通过名称调用。
var md2 = require("math");
console.log(md2.add(7,8));
直接在一个js文件中定义变量var x = 10;是无法引入到另一个js文件中的。arguments.callee函数调用返回的当前运行的函数,node执行模块代码时候,会添加代码
function (exports, require, module, __filename, __dirname) {
。。。。
}
JS文件是运行在函数里面
console.log(arguments.callee+" ");
执行结果
模块代码都是包装在函数中,使用exports、require传递出实参
- exports,-该对象函数或变量暴露到外部
- require,-函数、引入外部模块
- module,-当前模块自身exports是module的属性 exports就是module.exports
- __filename,-当前模块的完整路径
- __dirname,-当前模块所在文件夹的完整路径
当然可以直接使用x=10定义变量到全局中,不同的js直接可以不通过引入直接调用。
exports和module.exports区别
//module.exports独特用法
module.exports={
name:123
age:18
sayName:function(){
console.log("我是猪八戒");
}
}
//下列是等价的
exports.name=XXX
module.exports.name=XXX
由于exports直接是对属性进行操作的,而module.exports操作的是对象(操作对象可以对属性进行赋值,而操作属性无法修改对象)。所以exports只能使用exports.XX;module.exports既可以module.exports.XX,又可以module.exports={}。
Package包
CommonJS的包规范允许我们将一组相关的模块组合到一起形成一个完整的工具。CommonJS的包规范由包结构和包描述文件两部分组成。
包结构--用于组织包中的各种文件
包描述文件--描述包的相关信息,以供外部读取分析
包结构
包是一个压缩文件,解压以后一个目录
还包含如下文件:
-package.json 描述文件 必须
-bin 可执行二进制(binary)文件
-lib js代码(依赖代码)
-doc 文档
-test 单元测试
我们主要研究的是package.json
包描述文件
name:npm包的名称,在你打算发布一个npm包时,name字段和version字段是必不可少的,并且必须是唯一的。而如果你并不是打算发布npm包的话,name和version字段都是可缺省的。这个name字段最后会用作为URL的一部分、文件夹名称、以及命令行的参数。因此,不能包含对URL不安全的字符。name的命名规范如下:
- 长度必须小于等于214个字符
- 不能以"."或"_"开头
- 不能用大写字母
version:包的版本号。
description:一个string字段描述你的npm包,帮助其他人在npm search的时候发现你的npm包。
keywords:一个字符串组成的数组字段,帮助其他人在npm search的时候发现你的npm包
homepage:一个表示项目首页的url,一般是GitHub项目地址下的readme.md
bugs:一个表示接收问题反馈的url地址,也可以是email地址。一般是Github项目下的issues。
license:用于声明你的npm包使用的license,以便使用者知道该如何使用你的包,以及哪些限制的地方。
contributors:包的贡献者们的信息
dependencies:依赖
devDependencies:开发依赖
详细参考https://www.jianshu.com/p/bd672b5682de?utm_source=oschina-app