首页 > 其他 > 详细

前端模块化

时间:2021-06-01 15:15:26      阅读:14      评论:0      收藏:0      [点我收藏+]

** 聊聊CommonJS(服务器端)与ES6 Module(浏览器端)的使用与区别

第一种: ES6 Module
在ES6模块化出现之前,前端已经尝试了AMD,CMD等规范,这些规范不能同时应用于浏览器和服务器端。
ES6,是浏览器和服务器端通用的规范化开发规范,模块导入是值的引用,是静态的。

每个js文件都是一个独立的模块
导入模块成员,使用import关键字。导入需要用一对 {} 大括号来接收大于一个的我们需要导入的方法或函数,而且必须与导出时的名称一模一样
暴露模块成员使用 export关键字。

// B.js
function show() {
console.log(‘show方法被执行‘)
}

export default show

// A.js
import show from ‘./B.js‘
show() // show方法被执行
需要用babel配置,在.babel文件中
const presets = [
["@babel/env", {
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1"
}
}]
];
module.exports = { presets };

第二种: CommonJS
用于服务器端,nodejs中用,导入的是值的拷贝,同步加载。
模块分为 单文件模块 与 包
模块成员导出: module.exports 和 exports
模块成员导入: require(‘模块标志符‘)

// B.js
function show() {
console.log(‘show方法被执行‘)
}

module.exports = {
show
}

// A.js
const bModule = require(‘./B.js‘)

bModule.show() // show方法被执行


** 模块化

有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:
<script src="js/require.js" defer async="true" ></script>
async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

前端模块化

原文:https://www.cnblogs.com/halo-vv/p/14835750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!