ECMAScript 6 _ 模块化

news/2024/7/10 22:53:41 标签: 前端, ES6

模块化开发的规则 :
1. 如果你想使用 ES6 的模块化开发语法
  => 页面必须在 服务器 上打开
  => 本地打开不行
  => VS Code 下载插件, Live Server ( 会帮你配置一个虚拟服务器 )
  => 打开页面的时候, 鼠标右键 open with live server
    -> 快捷键, alt + l , 再按一次 alt + o

 

2. 当你使用了 模块化语法 以后
  => 每一个 js 文件, 都是一个独立的 文件作用域
  => 该文件内的所有变量和方法, 都只能在这个文件内使用
  => 其他文件不能使用
  => 如果想使用, 需要 导出
3. 每一个 js 文件, 也不能使用任何其他 js 文件内部的变量
  => 如果想使用
  => 那么你需要 导入 该文件

+ 导出语法 :
  export default { 你要导出的内容 } 
导出一个默认对象, 把你想给其他文件使用的方法,书写在这个 { } 内部

+ 导入语法 :
  import 变量 from 'js 文件' 
变量得到的内容是 该 js 文件 内导出的内容
  • moment 实现功能 为其他模块所使用文件
// 这里封装所有和时间操作相关的方法
// 作为一个功能函数文件出现
function format() { console.log('格式化时间') }
function diffTime() { console.log('获取时间差') }
const num = 100
const str = 'hello world'

// 因为模块化语法的出现
// 导致这里的两个方法, 只能在该文件内使用
// 其他文件绝对不可能使用这个方法

// 如果你想让其他文件内使用这个方法
// 就要在该文件内导出你想让其他文件使用的方法
export default {
  // 其他文件就可以使用我这个文件内的 format 方法了
  format,
  diffTime,
  num
}
  • 某一模块
// 我是完成某功能的模块
// 我需要一个时间格式化方法
// 我就可以使用 moment 模块内的 format 方法
// 我需要在这里导入 moment.js 文件

// 导入 moment.js
import moment from './moment.js'
const num = 200
console.log('我导入的 moment ', moment)
console.log('完成顶部导航功能')
moment.format()
console.log('自己的 num ' , num)
console.log('导入的 num ' , moment.num)
  • 整合
// 我作为整合模块出现
// 我把所有需要用到的内容都整合在一起
import './XXX.js'
import './XXX.js'
......
  • 页面使用:
    使用 script 标签的 src 属性引入指定的整合 js 文件
    script 标签需要书写 type 属性, 值写成 module
<!-- 只需要引入一个 index.js 文件 -->
<!-- 因为 index.js 文件内使用着 其他需要用到的模块 -->
<!-- 如果你页面引入的是一个使用了 ES6 模块化语法的 js 文件 -->
<!-- 必须在服务器上打开, 并且给 script 标签添加一个 type="module" 的属性 -->
<script src="./js/XXX.js" type="module"></script>
// 浏览器对于带有type="module"的<script>,都是异步加载


// jQuery 支持模块加载
<script type="module">
  import $ from "./jquery/src/jquery.js";
  $('#message').text('Hi from jQuery!');
</script>

一、多行暴露

模块1:module1.js

//多行暴露
export function foo() {
    console.log('foo() moudle1');
}

export function bar() {
    console.log('bar() moudle1')
}

二、统一暴露

模块2: module2.js

function fun1() {
    console.log('fun1() module2')
}

function fun2() {
    console.log('fun2() module2')
}
// 统一暴露
export {foo, bar}

以上两种向外暴露方式在主文件引入时必须使用对象的解构赋值引用(不能使用变量接收的方式来映入)

主模块:main.js

import {foo, bar} from '.js/src/module1.js'
import {fun1, fun2} from './js/src/module2.js'

三、默认暴露

export default {
    foo() {
        console.log('默认暴露方式')
    },
    bar() {
        console.log('默认暴露')
    }
}

默认暴露的方式只允许有一个: export default { } 且在主模块引入时可以使用定义变量来接收的方式!

// 引入模块3
import module3 from '.js/src/module3.js'

// 使用模块
module3.foo()
module3.bar()

http://www.niftyadmin.cn/n/1497926.html

相关文章

关于session序列化和session钝化和活化

在第一次启动服务器后&#xff0c;在session中放入一个对象。在页面可以获得&#xff0c;当重启服务器&#xff0c;但是没有关闭浏览器的情况下刷新页面仍然能够获得这个对象&#xff0c;前提是这个对象必须实现了java.io.Serializable接口。 session的序列化就是当服务器关闭的…

SmarteamV5R16的数据库分析(表、字段的意义)

smarteam是以色列人写的PDM软件&#xff0c;被达索收购&#xff0c;2000以后在中国市场&#xff0c;也就是制造业企业和工厂&#xff0c;有很好的销售业绩。管理图纸、物料、生命周期和流程。后台数据库&#xff0c;部分企业选择oracle。使用PL/SQL或者SQL Navigator打开数据库…

jQuery01——jQuery介绍和基本使用

1.1. jQuery 介绍 1.1.1 JavaScript 库 JavaScript库:即 library&#xff0c;是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的⻆度理 解库&#xff0c;就是在这个库中&#xff0c;封装了很多预先定义好的函数在里面&#xff0c;比如动画animate、hide、show&#…

Vue 移动端项目开发流程

目录 移动端电影项目 1、项目效果 2、开发项目流程 3、开发环境 4、初始化项目 5、vant 移动端组件库 介绍 5.5.1、安装 5.5.2、自动按需引入组件 (推荐) 5.5.3、移动端样式设置&#xff08;适配&#xff09; 6、路由规划 7、网络请求 实战案例 : 移动端电影项目…

mongodb 稀疏索引

稀疏索引(或者称间隙索引)就是只包含有索引字段的文档的条目&#xff0c;即使索引字段包含一个空值。也就是说间隙索引可以跳过那些索引键不存在的文档。因为他并非包含所有的文档&#xff0c;因此称为稀疏索引。与之相对的非稀疏索引或者说普通索引则包含所有的文档以及为那些…

10.自定义EL函数和自定义标签

需要在JSP页面中进行一些常见逻辑操作&#xff08;如对字符串进行操作&#xff09;&#xff0c;首先考虑是否可以用到sun公司提供的EL函数库&#xff08;fn.tld&#xff09;和JSTL 核心标签库 如果sun公司的EL函数库没有或者无法满足&#xff0c;就需要自己写 自定义标签或者写…

BANNED

搬到了这里https://dolabmoon.github.io 转载于:https://www.cnblogs.com/DOlaBMOon/p/7666098.html

第2讲——处理数据

一、学习新知识 我们记录一个信息&#xff0c;往往关注3个基本属性&#xff1a;信息将存储在哪里&#xff0c;要存储什么值&#xff0c;存储何种类型的信息。 例如&#xff0c;我今天的幸运数字是7&#xff0c;我想用程序记录下来&#xff1a; int luck_ynum 7;这段代码告诉程…