mmRouter-demo-list icon indicating copy to clipboard operation
mmRouter-demo-list copied to clipboard

webpack打包mmState项目不能运行或者打包

Open gogoyqj opened this issue 9 years ago • 3 comments

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!

gogoyqj avatar Apr 01 '16 02:04 gogoyqj

我们用webpack和mmstate打包都正常的啊~~ 路由里用 require.ensure 加载vm的

lkiarest avatar Apr 01 '16 03:04 lkiarest

in case

gogoyqj avatar Apr 01 '16 03:04 gogoyqj

@lkiarest 你可以贴点详细的说明上来,这样其他人在打包的时候也有个参考

gogoyqj avatar Apr 01 '16 09:04 gogoyqj