模块是自动运行在严格模式下而且没有办法退出运行的JavaScript代码。vue
模块能够是函数、数据、类,须要指定导出的模块名,才能被其余模块访问。react
//数据模块 const obj = {a: 1} //函数模块 const sum = (a, b) => { return a + b } //类模块 class My extends React.Components { }
给数据、函数、类添加一个export,就能导出模块。一个配置型的JavaScript文件中,你可能会封装多种函数,而后给每一个函数加上一个export关键字,就能在其余文件访问到。webpack
//数据模块 export const obj = {a: 1} //函数模块 export const sum = (a, b) => { return a + b } //类模块 export class My extends React.Components { }
在另外的js文件中,咱们能够引用上面定义的模块。使用import关键字,导入分2种状况,一种是导入指定的模块,另一种是导入所有模块。web
一、导入指定的模块。segmentfault
//导入obj数据,My类 import {obj, My} from './xx.js' //使用 console.log(obj, My)
二、导入所有模块浏览器
//导入所有模块 import * as all from './xx.js' //使用 console.log(all.obj, all.sun(1, 2), all.My)
若是给咱们的模块加上default关键字,那么该js文件默认只导出该模块,你还须要把大括号去掉。babel
//默认模块的定义 function sum(a, b) { return a + b } export default sum //导入默认模块 import sum from './xx.js'
不能在语句和函数以内使用export关键字,只能在模块顶部使用,做为react和vue开发者的你,这个限制你应该很熟悉了。函数
在react中,模块顶部导入其余模块。插件
import react from 'react'
在vue中,模块顶部导入其余模块。code
<script> import sum from './xx.js' </script>
有2种修改方式,一种是模块导出时修改,一种是导入模块时修改。
一、导出时修改:
function sum(a, b) { return a + b } export {sum as add} import { add } from './xx.js' add(1, 2)
二、导入时修改:
function sum(a, b) { return a + b } export sum import { sum as add } from './xx.js' add(1, 2)
当你的模块没有可导出模块,全都是定义的全局变量的时候,你可使用无绑定导入。
模块:
let a = 1 const PI = 3.1314
无绑定导入:
import './xx.js' console.log(a, PI)
有用过webpack打包js模块的同窗可能有经验,使用webpack打包了多个js文件,而后放到HTML使用script加载时,若是加载顺序不对,就会出现找不到模块的错误。
这是由于模块之间是有依赖关系的,就像你使用jQuery的时候,必须先加载jQuery的代码,才能使用jQuery提供的方法。
加载模块的方法,老是先加载模块1,再加载模块2,由于module类型默认使用defer属性。
<script type="module" src="module1.js"></script> <script type="module" src="module2.js"></script>
模块还有不少有意思的特性,对react和vue开发有必定经验的人对这些基本知识应该了如指掌,新手不了解也不用太心急,写几个module.js作一下尝试。若是浏览器报错,不能识别export模块,你可能须要先加载babel的js插件来编译它。