作者:mobiledu2502873611 | 来源:互联网 | 2023-09-23 17:22
非ES6模块化规范
- AMD和CMD适用于浏览器端的javascript模块化
- CommonJS适用于服务端的Javascript模块化
这些模块化标准,还是存在一定的差异性与局限性,并不是浏览器与服务器通用的模块化标准,
在ES6语法规范中,在语言层面定义了ES6模块化规范,是浏览器与服务器端通用的模块化开发规范
ES6模块化规范中定义(统一规范)
- 第个js文件都是一个独立的模块
- 导入模块成员使用import关键字
- 暴露模块成员使用export凑字
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
npm install --save @babel/polyfill
module.exports={presets}
const presets = [
["@babel/env",{
targets:{
edge:"17",
firefox:"60",
chrome:"67",
safari:"11.1"
}
}]
npx babel-node index.js
export default{}暴漏
const math = { name , age }
export default math;
import Math123 from './math.js'
import age,{a,b,c} from './model.js
export{}暴漏
function fun1(){}
export {fun1}
import {fun1} from './index.js'
fun1()
export {
cong as fun1
}
import {fun1 as name} from './index.js'
name()
混合引入
export default age
export a,b,c
import age,{a,b,c} from './model.js
中转导入(在一个文件夹下有很多模块文件,使用)
在模块文件夹中增加一个index.js文件作为中转模块,这样可以直接导入
项目文件夹
- 模块文件夹
- package1.js
- package2.js
- package3.js
- index.js
import {name} from './model.js'
import name as cong from './model.js'
import * as obj from './model.js'
if (typeof this!=='undefined'){
throw new Error('请使用模块方式加载!')
}
console.log(123)
console.log(456)
import './module.js'
if(){
import('model.js').then().catch()
}
export {name} from './module.js'
import {name} from './module.js'
export {name} from './module.js'
匿名函数导入导出
// 外部js
;var main = (function(){
function fun1(a,b,c){console.log(1,2,3)}
function fun2(a,b,c){}
return {
“fun1”:fun1,
“fun2”:fun2
}
})()
// 引入js
main.fun1(1,2,3)