ES6的import会被转化为commonjs格式或者是AMD格式,babel默认会把ES6的模块转化为commonjs规范的。javascript
import list from './list'; //等价于 var list = require('./list');
两种写法只需选一种,避免在代码中同时使用形成混淆。java
语法:Import.then Promise回调
动态的加载模块,import调用点会被解析为模块分割入口点,生成单独chunk。jquery
import('lodash').then(_ => { // Do something with lodash (a.k.a '_')... });
var $ = require('jquery'); var myModule = require('my-module'); var a = require('./a'); //此时webpack会将a.js打包进引用它的文件中,这是最广泛的情形。
语法:require.ensure
注:require.ensure() 被webpack包装为import() Promise.
webpack 在编译时,会静态地解析代码中的 require.ensure(),同时将模块添加到一个分开的 chunk 当中。这个新的 chunk 会被 webpack 经过 jsonp 来按需加载。webpack
require.ensure([], function(require){ var list = require('./list'); list.show(); }); //打包输出:1.XXXX.js // require.ensure([], function(require){ var list = require('./list'); list.show(); }, 'list'); //打包输出: list.XXX.js require.ensure([], function(require){ var list = require('./list'); list.show(); var edit = require('./edit'); edit.display(); }, 'list_and_edit'); //打包输出: list_and_edit.XXX.js
webpack既支持commonjs规范也支持AMD规范,这就意味着AMD的经典语法是能够正常使用的,如:es6
require(['./list'], function(list){ list.show(); }); //打包输出:1.XXX.js require(['./list', './edit'], function(list, edit){ list.show(); edit.display(); }); //不支持自定义文件名 //同require.ensure, 给定的依赖b会被打包为单独bundlle并在须要时可进行异步加载. require(['b'], function(b) { var c = require('c'); });
refs:
https://webpack.js.org/api/module-methods/#import
https://blog.csdn.net/huang100qi/article/details/78060086web