刚刚开始接触前端的模块化开发,写了个demo来学习webpack,配置文件及运行流程基本了解了,但是按需加载总是不能成功,还请各位大神帮忙看看:
入口文件中,分别采用了3种方法来加载:
import test from './index/test.js';
// const test=(resolve) => require(['./index/test.js'], resolve)
// const test=resolve => { require.ensure(['./index/test.js'], () => { resolve(require('./index/test.js')) }) }
test.exe('显示测试文字');//执行
test.js的内容很简单,只是打印到console:
const test={
exe:function (res) {
console.log('test方法的输出:'+res);
}
};
export default test
3种方法都测试了,只有第一种直接导入的方式运行正常,另外两种按需加载的方式都会报错,提示找不到方法。
如果把test.exe('显示测试文字');
注释掉,只加载不执行,那么就都不会报错。
我的理解是,加载代码没有错,但是需要它们加载的时候,却并没有加载成功,这是为什么呢?是不是我哪里写的不对?还是需要对webpack.config.jx进行额外的配置?
给你个实例参考下
html
需要异步加载的js文件 plugin.js
webpack的入口编译文件 entry.js
效果就是点击时,mod1.js才加载插入head,一开始是不加载的
最后关于webpack.config.js的配置。
最近也碰到了类似的问题,大致说一下。
webpack升级到2的时候对你第二种和第三种的信用方式,都没有直接打包到main.js里面。
也就是说对于首屏加载就需要的模块,不能再使用异步加载的模式,按需加载的可以。
你可以去打包出来的文件里面看一下,你的除了第一种方式,test方法都没有被打包到你的js里面。
第二个和第三种写法想做什么?是想模拟 AMD 或者 CMD 规范的写法么?
最常见 module 规范 ES6 module 和 node.js 的 commonJS 规范,因为在具体加载细节上有出入,比如加载时间和对文件的引用方式的不同。但是使用webpack的目的就是将不同规范统一化,webpack 会提前将所有 module
打包在一起,分别给一个 id ,通过 id 进行引用,使得 ES6 module 和 CommonJS 规范在 webpack 编译后没有任何区别,同样对于 AMD 和 CMD 规范。
如果楼主想用 webpack 实现 CMD 的延迟加载这个思路就是错的,因为无论哪种加载方式,webpack 所做的,就是将你的依赖(或者说即将依赖)的所有模块打包进一个文件,以至于在运行时都能通过 id 找到对应的包,弱化规范间的差异
不知道你的具体环境, 我自己的环境现状已经升级到Webpack2 + React Router v4. 可以参考文档: https://reacttraining.cn/web/...
首先需要编码, 创建一个 Bundle 组件, 用于按需加载需要的模块, 组件文件.
上述代码是从文档里面抄的, 修改了状态的初始化方式, 如果不修改状态的初始化方式, 就需要用到
babel-plugin-transform-class-properties
.使用的时候包含三个个步骤
导入
Bundle
模块异步加载
初始化
当然, 你还需要配置你的
.babelrc
和webpack.config.js
, 下面我给我我自己的, 你可以研究一下.webpack.config.js
.babelrc
还有公共块输出插件的配置
通过上述N个步骤后, 组件
Home
就可以使用了.