mmRouter-demo-list
mmRouter-demo-list copied to clipboard
webpack打包mmState项目不能运行或者打包
1,在配置state的js文件里
// 如果这个js文件不是amd规范的,你需要【amd模块的懒得试了。。。】
window.avalon= avalon = require('avalon') // 如果没有配置alias的话,就需要写完整路径了
require('mmState') // 如果没有配置alias的话,就需要写完整路径了
2,mmState通过ajax请求去加载templateUrl指定的模板,通过avalon.require去异步加载controllerUrl指定的控制器,因此需要做如下两个改动中任意一个
a,直接require
views: {
'viewname': {
...
controller: require('/a/b/c.js') // 直接require进来,这样也最终能打包到一起
}
}
或者
b,重写加载器,mmState有一个接口avalon.controller.loader去异步加载的,源码如下:
avalon.controller.loader = function (url, callback) {
// 没有错误回调...
function wrapper($ctrl) {
callback && callback($ctrl)
}
url = url instanceof Array ? url : [url]
if (window.requirejs) {
requirejs(url, wrapper)
} else if (typeof require === "function" && require.ensure) {
require.ensure(url, wrapper)
} else if (avalon.require) {
avalon.require(url, wrapper)
}
}
你需要做一定的修改,使得这个loader可以正常运行,因为他默认会去用requirejs,require,avalon.require,去加载模块,但是你使用webpack的时候,可能就没有这几个引入模块的api了,so fix it!
我们用webpack和mmstate打包都正常的啊~~ 路由里用 require.ensure 加载vm的
in case
@lkiarest 你可以贴点详细的说明上来,这样其他人在打包的时候也有个参考