变量的导出涉及到四个关键字module.exports与exports,export与export default,
其中module.exports与exports是符合CommonJS模块规范的。
export与export default是es6用来导出模块的。
var exports = module.exports;
总之我们只要记住一点:module.exports指向的东西,就是我们要导出的东西
- const test=1;
- module.exports ={test};
- console.log(module.exports)
- const test1="test1";
- const test2= "test2";
- module.exports ={test1};
- module.exports.test2 =test2;
- console.log(module.exports)
- const test1="s";
- const test2= "ss";
- const test3="sss";
- module.exports.test2 =test2;
- module.exports ={test1};
- console.log(module.exports)
- const test1="s";
- const test2= "ss";
- const test3="sss";
- exports.test2 = test2;
- console.log(module.exports)
- const test1="s";
- const test2= "ss";
- const test3="sss";
- export default test1;
- export {test2};
- export const test4="ssss";
- console.log(module.exports)
- const test1 = "test1";
- export {
- test1//这种可以
- };
- console.log(module.exports)
- export {
- test1:1
- };
- console.log(module.exports)
- const test1="s";
- const test2= "ss";
- const test3="sss";
- const test4="ssss";
- export default test1;
- export {test2};
- module.exports ={test3};//这里进行了指向更改
- export {test4};
- console.log(module.exports)
我们知道了如何导出变量,那肯定还得知道如何导入
使用require 与import来导入
require 是是符合CommonJS模块规范的。import是es6用来导出模块的。
require 可以在js文件中的任意位置使用,import只能在文件开头使用
require比较好理解,他可以直接获取module.exports的对象,进而使用其中的属性和方法
- //test.js中
- const test1="s";
- const test2= "ss";
- const test3="sss";
- const test4="ssss";
- export default test1;
- export {test2};
- exports.test3=test3;
- module.exports.test4=test4;
- //引用的文件中
- var test = require("../../utils/test.js");
- console.log(test)
import是直接获取module.exports对象的属性和方法
方法1、方法2、方法3都在下面的代码里面
- //test.js中
- const test1="s";
- const test2= "ss";
- const test3="sss";
- const test4="ssss";
- export default test1;//导出默认
- export {test2};
- exports.test3=test3;
- module.exports.test4=test4;
- //引用的文件中,import在文件开头
- //情况1(用法)
- import {test2,test3,test4} from "../../utils/test.js"//这种情况下对test2 test3 test4进行单独导出
- //情况2(用法)
- import test0 from "../../utils/test.js"//这种情况下只对module.exports中的default的值单独导出并且赋值给test0
- //情况3(用法)
- import * as all from "../../utils/test.js"//这种情况下将module.exports的所有值都付给all
- //test.js中
- const test1="s";
- export default test1;
- //引用的文件中,import在文件开头
- import SuiBianXie from "../../utils/test.js"
- console.log(SuiBianXie)
require:运行时加载
import:编译时加载(效率更高)【由于是编译时加载,所以import命令会提升到整个模块的头部】
require:模块就是对象,输入时必须查找对象属性
import:ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,再通过 import 命令输入(这也导致了没法引用 ES6 模块本身,因为它不是对象)。由于 ES6 模块是编译时加载,使得静态分析成为可能。有了它,就能进一步拓宽 JavaScript 的语法,比如引入宏(macro)和类型检验(type system)这些只能靠静态分析实现的功能。
CommonJs模块和ES6模块的区别:
(1)CommonJs模块默认采用非严格模式
(2)ES6 的模块自动采用严格模式,不管你有没有在模块头部加上 “use strict”;
(3)CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用