常见的webpack打包工具中,经常用到require和module.exports。这俩都是依赖于node环境才能被识别。如果放到静态js文件中,是不能被浏览器识别的。
exports是module.exports的一个引用。在node环境下,运行之前,node会先创建Modlue实例,即
var module = new Module();
var exports = module.exports;
这样的话,就算不定义这俩对象,也是可以直接使用。
这俩是导出自己定义的一些属性和对象。而与之对应的就是require:引入。在我们的代码里,require,是一个动态运行的东西,等代码打包的时候,var src = require("../pic.png");就等价于var src = (()=>{retrurn "./pic.png"})();这只是简化写的,真正执行的时候并不是如此,只是举例。
import(引入)、export(输出)则是es6的语法。这俩是编译时才执行。简单来说,就是必须先转化为es5语法才可以。否则无论是node还是浏览器,两个环境都不能识别这些语句,毕竟都是喂给v8。
import list from './list'; 在代码打包的时候,就解构成了es5的代码。把export导出的代码块拿来用了。
var list = require('./list');在代码打包的时候,转化为异步函数,等代码执行的到这里了,才会执行这个函数。