【js模块化import export语法总结】
js模块化import export语法总结
内置的模块化语法
内置的语法使得开发人员可以在浏览器中使用模块化,但是需要在script标签中使用type="module"属性告知浏览器使用的是模块化
export导出
- 默认导出
- 命名导出
- 各种导出的语法之间不会相互影响,可以有任意多个导出
- 默认导出只能有一个
export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const
export function FunctionName() {...}
export class ClassName {...}
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };
//合并模块
//有时你会想要将模块聚合在一起。您可能有多个级别的依赖项,您希望简化事物,将多个子模块组合到一个父模块中。这可以在父模块中使用以下的导出语法:
// 这实际上是导入后跟导出的简写,即“我导入模块 x.mjs,然后重新导出部分或全部导出”。
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
//a.js
//输出单个变量
export var a='A';
//输出多个变量
var b='b';
var c='c';
var d='d';
export{b,c,d};
//重命名输出
export{b as b1,c as c1,d as d1}
//输出单个函数
export function fn() {
this.name="jack ma";
console.log('fn');
}
function fn1(){
}
function fn2(){
}
function fn3(){
}
//输出多个函数
export {fn1,fn2,fn3}
//输出class
export class modules{
constructor(){
}
}
import导入
- 导入默认模块时,变量名可以重新自定义,不要求和模块导出时的变量名一致,一般保持一致,但非必须
- 在浏览器中使用时,路径需要书写完整(./或者…/开头,扩展名结尾)
import defaultExport from "module-name";//导入使用默认导出名称的导出
import * as name from "module-name";//导入带有别名的所有导出
import { export } from "module-name";//导入单个导出
import { export as alias } from "module-name";//导入单个带有别名的导出
import { export1 , export2 } from "module-name";//导入多个导出
import { export1 , export2 as alias2 , [...] } from "module-name";//导出时重命名多个
import defaultExport, { export [ , [...] ] } from "module-name";//
import defaultExport, * as name from "module-name";
import "module-name";
//导入全部变量
import * as alls from './a.js';
console.log(alls);
//导入指定的变量
import{a,b,c} from './a.js'
console.log(a,b,c)
//导入指定的变量并重命名
import{a as a1,b as b1,c as c1} from './a.js'
console.log(a1,b1,c1)
import导入的模块都是引用
export let counter = 3;
export function incCounter() {
counter++;
}
export function setCounter(value) {
counter = value;
}
//main.js
import { counter, incCounter ,setCounter} from './lib';
// The imported value `counter` is live
console.log(counter); // 3
incCounter();
console.log(counter); // 4
setCounter(0);
console.log(counter); // 0
可以看见,当变量counter改变时,导入的模块也会跟着改变,所以导入的值类型的模块肯定也是采用的引用模式
参考链接:
1.简书 ES6 import和export的基本语法
2.CSDN import和export的用法
3.MDN Web->开发技术-> JavaScript ->JavaScript 指南->JavaScript 模块