weex開發(fā)之使用webpack優(yōu)化打包

之前我們已經(jīng)說過使用gulp+weex來搭建一個(gè)weex的開發(fā)環(huán)境津滞,
weex+express+gulp開發(fā)文件搭建
但是在開發(fā)中發(fā)現(xiàn)拢军,使用gulp-weex這個(gè)npm包來實(shí)現(xiàn)的話往声,對于組件的依賴和引入存在路徑的問題柠座,比如在一個(gè)組件里面需要加載另一個(gè)文件的組件铅祸,使用gulp-weex打包的時(shí)候作箍,會找不到路徑硬梁,翻看了源碼,也找不到配置路徑的地方胞得,而且不管是絕對和相對的路徑依賴荧止,都讀取不到相應(yīng)的文件

翻看了一下weex的demo項(xiàng)目,使用的是webpack來進(jìn)行模塊化打包實(shí)現(xiàn)懒震,所以考慮在gulp項(xiàng)目中加入webpack的模塊化依賴打包方式罩息,因?yàn)閣ebpack主打品牌就是模塊化打包,所以就在之前項(xiàng)目基礎(chǔ)上更換成webpack來實(shí)現(xiàn)模塊依賴个扰,變量管理瓷炮,而gulp同樣還可以繼續(xù)使用它的工程化管理優(yōu)勢,兩者結(jié)合使用递宅,具體實(shí)現(xiàn)如下:

# 環(huán)境配置文件 config.json
"weex": {
    "views": "app/views/weex/",
    "mainHtml": "task/weexTemplate/",
    "transportJs": "app/public/weex/",
    "previewPath": "app/public/weexPreview/"
}
# webpack配置文件 weex-webpack.config.js
'use strict';
require('webpack'); // 需要引入webpack
require('weex-loader'); // webpack對weex處理的插件

const path   = require('path');
const fs     = require('fs');
// 一些環(huán)境變量配置
const config = require('../config.json');
// 我們寫的weex頁面目錄地址娘香,需要使用絕對地址
const dirPath = path.join(__dirname, '../../', config.weex.views);

// 配置入口文件
// 因?yàn)槊總€(gè)頁面都是一個(gè)單獨(dú)的weex的入口文件苍狰,在使用webpack打包時(shí)候,要是多入口文件的打包的話
// 需要在entry里面配置每個(gè)入口烘绽,也就是需要傳一個(gè)入口文件地址的數(shù)組
// 另外每個(gè)入口文件需要加上一個(gè)entry=true的查詢參數(shù)
function getEntryFiles(dirs) {
    const files = fs.readdirSync(dirs);
    const entrys = {};
    let fName = '';

    /** 遍歷目錄文件淋昭,這里處理之后默認(rèn)將第一級目錄, 第二級目錄的文件設(shè)置為入口文件即:
    *   --weex
    *     ---goods
    *        --- component
    *            --- header.we // 不是入口文件
    *        --- goodsList.we // 設(shè)置成入口文件
    *   --index.we // 設(shè)置成入口文件
    * 上面的文件目錄處理之后會返回如下的入口文件數(shù)組
    *  [
    *     'index': 'app/views/weex/index.we?entry=true',
    *     'goodsList': 'app/views/weex/goods/goodsList.we?entry=true'
    *  ]
    */
    files.forEach(function (file) {
        const curPath = dirs + file;

        if ( fs.lstatSync(curPath).isDirectory() ) {
            fs.readdirSync(curPath).forEach((item) => {
                const realFile = curPath + '/' + item;

                if (!fs.lstatSync(realFile).isDirectory()) {
                    fName = getFilesName(item);
                    if ( fName !== -1 ) {
                        entrys[fName] = realFile + '?entry=true';
                    }
                }
            });
        } else {
            fName = getFilesName(file);
            if ( fName !== -1 ) {
                entrys[fName] = curPath + '?entry=true';
            }
        }
    });

    return entrys;
}

// 獲取文件名字,如果不是.we的文件安接,不進(jìn)行處理
function getFilesName(file) {
    const fName = file.match(/(.+)\.we$/);

    if ( fName ) {
        return fName[1];
    }

    return -1;
}

// 返回webpack配置
module.exports = {
    entry: getEntryFiles(dirPath), // 入口文件
    output: {
        path: path.join(__dirname, '../../', config.weex.transportJs),
        filename: '[name].js'
    }, //輸出文件地址和文件名配置
    resolve: {
        alias: {
            // 定義一些公共的變量,可以代碼里面直接使用,在weex文件里面import組件的時(shí)候要是不是同級目錄的需要使用絕對路徑翔忽,這里定義一個(gè)絕對路徑的變量可以在weex文件里面直接使用
            beforePath: dirPath
        }
    }, // 定義一些全變量,編譯時(shí)使用
    module: {
        loaders: [
            {
                test: /\.we(\?[^?]+)?$/,
                loaders: [ 'weex-loader' ]
            }
        ] //加載weex-loader對.we文件進(jìn)行處理
    }
};

這樣就可以在node打包時(shí)加載這個(gè)配置文件盏檐,然后用webpack來進(jìn)行打包了歇式,因?yàn)槲覀冺?xiàng)目使用的是gulp來進(jìn)行工程化管理的,所以我們可以將webpack模塊化打包變成一個(gè)gulp任務(wù)胡野,如:

const gutil          = require('gulp-util');
const webpack        = require('webpack');
const weexConfig     = require('../configs/weex-webpack.config');

/**
 * 只對每個(gè)業(yè)務(wù)的入口文件進(jìn)行weex的編譯
 */
gulp.task('weex', function (callback) {
    webpack(weexConfig, function(err, stats) {
        if(err) throw new gutil.PluginError("webpack", err);
        gutil.log("[webpack]", stats.toString({
            // output options
        }));
        callback();
    });
});

這樣材失,當(dāng)我們在編寫weex時(shí),需要引入一些組件依賴的時(shí)候硫豆,就可以使用import了龙巨,而不用全部都寫在一個(gè)文件里面,如:

# goods/goodsList.we
<!--賣家信用和成交率-->
<template>
    <div>
        <text class="text-small">賣家信用:</text>
        <sellerLevel grade="{{grade}}" class="border-light padding-r-small"></sellerLevel>
        </div>
    </div>
</template>

<script>
    require("beforePath/goods/components/sellerLevel.we");
</script>

<style>
.text-row{
    flex-direction: row;
}
.text-small{
    font-size: 24;
}
.border-light{
    border-right-width: 1;
    border-right-color: #e8e8e8; 
}
.padding-r-small{
    padding-right: 20;
}
.padding-l-small{
    padding-left: 20;
}
</style>

# goods/components/sellerLevel.we
<template>
    <div>
        <div if="spanRepeat != 0" style="flex-direction: row;">
            <image src="{{imgPath}}" repeat="{{setLevels(spanRepeat)}}" style="width: 30;height:30"></image>
        </div>
        <text if="showMsg">{{showMsg}}</text>
    </div>
</template>

<script>
    var badgeUrl = "";
    module.exports = {
        data: {
            imgPath: '',
            spanRepeat: 0,
            showMsg: false
        },
        created: function(){
            
        },
        methods: {
            
        }
    }
</script>
<style>

</style>

運(yùn)行g(shù)ulp weex打包命令熊响,加上就可以了旨别,真正的彌補(bǔ)了之前gulp-weex的缺點(diǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耘眨,隨后出現(xiàn)的幾起案子昼榛,更是在濱河造成了極大的恐慌,老刑警劉巖剔难,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胆屿,死亡現(xiàn)場離奇詭異,居然都是意外死亡偶宫,警方通過查閱死者的電腦和手機(jī)非迹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纯趋,“玉大人憎兽,你說我怎么就攤上這事〕趁埃” “怎么了纯命?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痹栖。 經(jīng)常有香客問我亿汞,道長,這世上最難降的妖魔是什么揪阿? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任疗我,我火速辦了婚禮咆畏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吴裤。我一直安慰自己旧找,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布麦牺。 她就那樣靜靜地躺著钮蛛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剖膳。 梳的紋絲不亂的頭發(fā)上愿卒,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音潮秘,去河邊找鬼。 笑死易结,一個(gè)胖子當(dāng)著我的面吹牛枕荞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搞动,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼躏精,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹦肿?” 一聲冷哼從身側(cè)響起矗烛,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箩溃,沒想到半個(gè)月后瞭吃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涣旨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年歪架,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹陡。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡和蚪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烹棉,到底是詐尸還是另有隱情攒霹,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布浆洗,位于F島的核電站催束,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辅髓。R本人自食惡果不足惜泣崩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一少梁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矫付,春花似錦凯沪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杀赢,卻和暖如春烘跺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脂崔。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工滤淳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砌左。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓脖咐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汇歹。 傳聞我的和親對象是個(gè)殘疾皇子屁擅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容