NodeJS模块和ES6模块系统语法及注意点

 

社区模块规范:

1.CommonJS规范
规范实现者:
NodeJS 服务端
Browserify 浏览器

2.AMD规范 全称 异步模块定义
规范实现者:
RequireJS 浏览器

3.CMD规范 通用模块定义
规范实现者:
seaJS 服务端和浏览器通用

官方模块规范

1.ESM规范 就是ES6 Module
各浏览器和服务端

目前常用的就是浏览器端的RequireJS、NodeJS、以及ESM

CommonJS语法分析

module.export

关键
1.module.exports实质上是一个对象,最后模块导出的对象就是这个引用指向的对象

  module.export.key = value   // eg:    module.export.a = 1;    // 整体管理导出,此时exports与module.exports指向断开,导致exports上的属性被忽略   module.export = {     a:1,     b:1   }

2.exports是一个module.export的助手变量,用于就地导出,两者默认指向同一对象,即module.exports === exports true

  // 像比较长的程序,写完所有之后,再去找到需要导出的变量再移到低端的export.module上逐个添加,是相当麻烦,一般在变量下决定是否导出   //eg    let fA = function () {    }   module.exports.fA = fA   let fB = function () {    }   module.exports.fB = fB    // exports 简洁很多   let fA = function () {    }   module.fA = fA   let fB = function () {    }   module.fB = fB

3.在逐个导出时使用exports,而在导出一个对象时,使用module.exports,不建议混用,如果需要,可以作一下处理:

  // 在最后导出时将exports对象和module.exports对象合并   exports.a = 1   module.exports = Object.assign({   b : 1   },exports)

require

关键:
1.模块区分,知道即可
let f = require('url')

  // 核心模块,第三方模块(npm安装),指定模块名即可   let f = require ('modulename')   // 自定义模块,需指定相对或者绝对路径   let f = require('absolutePATH/relativeAPTH')

2.查找时,没有后缀名的会尝试添加.js、.json、.node,这里可以稍微偷个懒

  let f = require('./circle')   // 等同于   let f = require('./circle.js')

ESM语法分析:

export var/function/class

关键:
1.导出值和内部值要有对于关系,即

  // error   export 1    // error   let m = 1   export m    // correct   export let m = 1    // correct   let m = 1;   export {m}

直接在声明时导出或者用一个{}包裹导出

2.export default 用于导出一个默认值,使得用户可以不需要知道内部导出变量名称即可使用
PS: 一个模块只能有一个默认导出


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信