avalon.oniui icon indicating copy to clipboard operation
avalon.oniui copied to clipboard

如何打包

Open gogoyqj opened this issue 8 years ago • 3 comments

推荐使用requirejs打包【,webpack的坑还没有淌过】,并禁用avalon自带的loader或者直接使用avalon.shim.js

大致的思路【只打包oniui,下面的一个回复有介绍打包oniui + 项目】

1,output.js - 在该文件里define(["uiname.js"], function() {}),引入用到的组件

2,build.js

npm install requirejs

// build.js
                    var requirejs = require("requirejs")
                    requirejs.optimize({
                        baseUrl: 'oniui目录',
                        name: "output",
                        out: "输出文件.js"
                    }, function(res) {
                        console.log(res) // 成功
                    }, function(err) {
                        console.log(err) // 出错
                    })
```·

3,css.js【自行实现,你可以在这个里面自己去读取并合并css,省事的话,可以直接把oniui里面所有的css文件全部筛选出来,拼凑在一起就可以了】
```javacript
define(['module'], function (module) {
    return {
        load: function(name, localRequire, onLoad) {onLoad();return ""},
        get: function() {
            return ""
        },
        write: function(pluginName, moduleName, write, config) { // 这个是node环境打包时候调用
            // 如果不想内联css到js内,可以在这里把css文件的路径写入到外面一个css【比如main.css】内,再另行打包
            write.asModule(pluginName + "!" + moduleName, "define({});\n"); // 你也可以在这里返回一个字符串,然后直接在页面里创建style标签,写入style规则
        }
    };
})

你可以使用开源的require-css,该工具打包后会将css内联

此外你还需要text.js,requirejs插件,将css.js和text.js放在oniui根目录(也有可能是node_modules目录)

4,node build.js

gogoyqj avatar Jul 06 '15 02:07 gogoyqj

这里有一个基于requirejs的打包详细例子【requirejs和用gulp集成requirejs版】:

https://github.com/gogoyqj/mmRouter-demo-list/tree/master/requirejs

tips:如果用requirejs打包,则不能用avalon自带的加载器,截止目前必须采用requirejs的加载器

gogoyqj avatar Jul 17 '15 02:07 gogoyqj

我的main.js代码如下

define(["./textbox/avalon.textbox","./dropdown/avalon.dropdown","./dropdownlist/avalon.dropdownlist"],function(){

});

built.js代码如下

({
    baseUrl : "../avalon-1.4.4/",
    name: "main",
    out : "../avalon-1.4.4/oniui.js",
    paths : {
        text : "../require/text",
        css : "../require/css",
        "css-builder" : "../require/css-builder",
        "normalize" : "../require/normalize"
    }
})

也修改了avalon.getModel.js引avalon为define(["./avalon.shim"], function(avalon) {了; 打包成功了,用的时候html代码还是ms-controller之类的,执行avalon.sacn()也没有用,这是什么原因啊?

lovelwpeng avatar Nov 18 '15 07:11 lovelwpeng

不要用requirejs打包了,改成webpack吧,我写了专门的文章了

http://www.cnblogs.com/rubylouvre/p/4963984.html

RubyLouvre avatar Nov 18 '15 08:11 RubyLouvre