原创翻译,转载请注明出处。
原文地址:https://webpack.js.org/guides/code-splitting-import/
动态引入
目前,一个把类函数的模块加载语法import()添加到ECMAScript的提议,正在讨论中。
ES2015加载器细则定义import()为一个能在运行时动态加载ES2015模块的方法。
webpack把import()当作一个分割点,把需求的模块放到单独的代码块里。import()把模块名当作参数,返回一个许诺:import(name) -> Promise
index.js
functiondetermineDate(){ import('moment').then(function(moment){ console.log(moment().format()); }).catch(function(err){ console.log('Failed to load moment', err); }); } determineDate();
许诺polyfill
如果你在旧浏览器里使用import(),别忘了用像es6-promise或者promise-polyfill的polyfill来shim 许诺。
(译者注:没找到合适的词来译shim和polyfill,其作用是让各版本的浏览器兼容Javascript方法)
在你应用的入口点里:
import Es6Promise from'es6-promise'; Es6Promise.polyfill(); // or import'es6-promise/auto'; // or import Promise from'promise-polyfill'; if(!window.Promise){ window.Promise = Promise; } // or ...
通过Babel使用
如果你想通过Babel使用import,你需要安装或者添加syntax-dynamic-import插件,为避免编译错误它仍然在第三阶段。等提议完全加到细则里之后这将完全没有必要。
npm install --save-dev babel-core babel-loader babel-plugin-syntax-dynamic-import babel-preset-es2015 # for this example npm install --save moment
index-es2015.js
functiondetermineDate(){ import('moment') .then(moment =>moment().format('LLLL')) .then(str => console.log(str)) .catch(err => console.log('Failed to load moment', err)); } determineDate();
webpack.config.js
module.exports ={ entry:'./index-es2015.js', output:{ filename:'dist.js', }, module:{ rules:[{ test:/\.js$/, exclude:/(node_modules)/, use:[{ loader:'babel-loader', options:{ presets:[['es2015',{modules:false}]], plugins:['syntax-dynamic-import'] } }] }] } };
不用syntax-dynamic-import插件的话将会发生下面的编译错误:
- Module build failed: SyntaxError: 'import' and 'export' may only appear at the top
或
- Module build failed: SyntaxError: Unexpected token, expected {
通过Babel和async/await使用
ES2017 async/await 和import()一起使用:
npm install --save-dev babel-plugin-transform-async-to-generator babel-plugin-transform-regenerator babel-plugin-transform-runtime
index-es2017.js
asyncfunctiondetermineDate(){ const moment =awaitimport('moment'); returnmoment().format('LLLL'); } determineDate().then(str => console.log(str));
webpack.config.js
module.exports ={ entry:'./index-es2017.js', output:{ filename:'dist.js', }, module:{ rules:[{ test:/\.js$/, exclude:/(node_modules)/, use:[{ loader:'babel-loader', options:{ presets:[['es2015',{modules:false}]], plugins:[ 'syntax-dynamic-import', 'transform-async-to-generator', 'transform-regenerator', 'transform-runtime' ] } }] }] } };
import替代require.ensuse?
好消息:加载代码块失败的问题现在可以解决,因为他们是基于Promise。
警告:require.ensure考虑到了通过第三个参数的可选配置来简易命名代码块,但是import API还没有提供这个功能。如果你想保留这个功能,你可以继续使用require.ensure。
require.ensure([],function(require){ var foo =require("./module"); },"custom-chunk-name");
弃用System.import
在webpack里,使用System.import是不符合提议细则的,所以它在v2.1.0-beta.28里被弃用,支持import()。
一些例子
- https://github.com/webpack/webpack/tree/master/examples/harmony
- https://github.com/webpack/webpack/tree/master/examples/code-splitting-harmony
- https://github.com/webpack/webpack/tree/master/examples/code-splitting-native-import-context
网页链接
-- End --
相关推荐
- **官方文档**:[Webpack官网](https://webpack.js.org/) - **中文指南**:[Webpack中文指南](https://zhcn.webpack.js.org/) - **社区资源**:GitHub、Stack Overflow等社区讨论。 ### 结语 Webpack作为一个强大...
- **代码拆分**:Webpack 2 支持动态导入 (`import()`),这使得代码分割变得更加简单和灵活。通过使用 `require.ensure` 或动态导入语法,可以轻松实现按需加载。 #### 代码分割 - **CSS**:可以使用特定的 loader ...
Element UI Helper Master可能包含了一些性能优化技巧,如懒加载(Lazy Loading)、按需引入(On Demand Import)、代码分割(Code Splitting)等,以减少项目体积并提升加载速度。 5. **最佳实践**: 项目可能包含了一套...
查阅Webpack文档,了解如何扩展和优化你的配置。 ### 总结 通过以上步骤,你已经成功地搭建了一个使用Preact和Webpack2的基础项目。随着对这两个库的深入理解,你可以逐步定制和优化项目,以适应更复杂的应用场景...
**tree shaking**:Webpack 的一项优化技术,用于移除未使用的JavaScript代码,基于 ES6 模块的静态性质实现,有助于减小生产环境的代码体积。 **Source Maps**:Source Maps 可以帮助开发者在浏览器的开发者工具中...
Webpack 是一个现代JavaScript应用程序的静态模块打包工具。它在开发过程中扮演着重要...通过阅读提供的"xmind"文档,你将获得更详细的Webpack指南,包括概念解析、功能介绍和实例演示,进一步提升你的Webpack技能。
3. **代码拆分**:通过Webpack的代码分割功能,imweb-tpl-loader可以帮助优化项目,只在需要时加载模板,从而减少首屏加载时间。 4. **性能优化**:编译后的模板函数在运行时执行速度快,因为它们已经被转化为...
如果`docs`目录存在,那么可能包含API文档、使用指南和示例,帮助开发者理解和使用“mo”库。 9. **许可证和README**: 项目通常会有LICENSE文件,规定了软件的使用权限和条件。README文件则提供了项目简介、安装...
- **自动化构建工具**:使用Webpack、Gulp等工具自动完成代码压缩、合并等任务。 - **持续集成/持续部署(CI/CD)**:通过自动化流程确保代码质量并快速发布应用。 **技术细节:** - 构建工具可以帮助开发者自动化...
9. **性能优化**:利用Webpack或Rollup进行代码打包和优化,如代码分割、Tree Shaking等,提高加载速度。 10. **安全**:遵循OWASP JavaScript Top 10,避免常见的安全风险,如XSS、CSRF等,并使用 ESLint 的 ...
通常,这意味着开发者希望读者能查看项目的GitHub仓库或其他文档资源,以获取详细的安装指南、使用方法和项目结构等信息。 **标签解析:** - **angularjs**:这是一个基于JavaScript的前端框架,用于构建动态Web...
例如,源代码中的每个功能可以被封装为独立的模块,通过`require`或`import`语句进行导入和使用。 ### 4. 测试框架 测试是软件开发中不可或缺的一部分。`skeleton-js` 的`test`目录下可能包含配置文件和测试用例,...
4. **文档(README.md)**:项目介绍、安装和使用指南。 5. **构建脚本(build scripts)**:如Gulp、Webpack等,用于编译、打包和优化代码。 6. **许可证文件(LICENSE)**:定义项目开源许可协议,如MIT、Apache...
但是对于使用webpack 1的用户,由于配置语法和内部机制的变化较大,建议仔细阅读官方文档和迁移指南,了解每一个配置项和功能的变化,确保迁移过程中的平滑过渡。 在进行webpack4的升级迁移时,首先需要更新***k的...
3. **模块管理**: τ工具支持ES6模块化,允许开发者使用import/export语法组织代码,同时自动处理模块间的依赖关系,简化了代码结构和维护。 4. **热重载**: τ工具具备热重载功能,在开发过程中修改代码后,页面会...
7. `README.md`:介绍项目背景、安装步骤、使用指南和贡献方式。 8. `LICENSE`:声明项目的开源许可证类型。 9. `scripts`或`build`目录:包含构建工具的配置和脚本,如Webpack、Gulp或Grunt。 10. `src`目录:存放...
5. **模块化**:使用ES6的模块系统(import/export)进行代码组织,使得代码可重用性和可维护性更高。 6. **测试框架**:为了确保代码质量,项目可能包含了Jest或Mocha等测试框架,配合Chai或Enzyme等断言库,进行...
4. **构建工具**:如Webpack、Rollup或Gulp,它们将源代码打包成适合浏览器执行的格式,并可以进行优化,如代码分割、压缩和混淆。 5. **包管理器**:项目可能使用npm(Node Package Manager)或yarn来管理依赖关系...
标题 "alfinweblanjut.github.io" 暗示这是一个个人或项目网站的源代码存储库,托管在GitHub上。通常,这种类型的仓库包含了网页的HTML、CSS和JavaScript文件,用于构建和展示一个静态网站。描述中的内容与标题相同...
【压缩包子文件的文件名称列表】:NugrahSMD-main 通常,"main"在代码仓库中指的是项目的主目录或入口点,可能包含项目的源代码、配置文件、README文档等。这个目录可能包括以下结构: 1. `src/` - 源代码文件夹,...