成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開始搭建React同構(gòu)應(yīng)用(二):瀏覽器端工程化

wwq0327 / 3378人閱讀

摘要:從零開始搭建同構(gòu)應(yīng)用二項(xiàng)目工程化瀏覽器端在從零開始同構(gòu)開發(fā)一中我們已經(jīng)能實(shí)現(xiàn)基本的配置和編譯了。接下來我們需要將編譯工作工程化。配置作用自動(dòng)生成自動(dòng)在引入,。文件內(nèi)容如下同構(gòu)開發(fā)配置自動(dòng)刷新這里我們用到的修飾器特性。

從零開始搭建React同構(gòu)應(yīng)用(二) 項(xiàng)目工程化(瀏覽器端)

在從零開始React同構(gòu)開發(fā)(一)中我們已經(jīng)能實(shí)現(xiàn)基本的React配置和編譯了。接下來我們需要將編譯工作工程化。

代碼

代碼在這,建議下載后,對(duì)照著看,因?yàn)槲恼虏环奖惆阉械拇a貼上來

主要內(nèi)容

項(xiàng)目目錄結(jié)構(gòu)優(yōu)化

stylus樣式文件的處理和打包

extract-text-webpack-plugin配置

html-webpack-plugin配置

配置browser-sync自動(dòng)刷新(利用es6的decoratort特性)

項(xiàng)目目錄結(jié)構(gòu)優(yōu)化

先看下整理后的目錄結(jié)構(gòu)

   src
    ├─config //附加webpack配置文件
    ├─module
    │  ├─common //公共模塊
    │  │  └─stylus
    │  ├─index //首頁(yè)模塊
    │  │  ├─component
    │  │  └─stylus
    │  │      └─img
    │  └─TodoDetail //todo詳情模塊
    │      └─stylus
    └─template //HTML模版

module文件夾放置了各個(gè)模塊,我把頁(yè)面以模塊分類,每個(gè)模塊下第一層的.jsx文件就是頁(yè)面的入口文件(common除外)。

common模塊文件夾放置一些公共組件、公共庫(kù)、公共樣式等。

template文件夾用于放置html-webpack-plugin用到的頁(yè)面模版。

當(dāng)然我還在探索更好的目錄配置方式,大家如果有想法歡迎@我^_^。

添加npm script

我們先添加一條watch命令,用于開發(fā)環(huán)境的編譯。

  "scripts": {
    "watch": "webpack -d -w --progress --colors --bs",
    "test-server": "anywhere -p 18341 -d ./build"
  },
樣式文件處理 css、stylus文件的處理

前篇文章我們只編譯了jsx,我們還沒引入樣式,假設(shè)現(xiàn)在項(xiàng)目的css使用stylus來編寫。那么可以參考以下配置。
我們需要3個(gè)loader:

stylus-loader

autoprefixer-loader

css-loader

vue-style-loader

file-loaderurl-loader

這些loaders大家肯定耳熟能詳啦,可能大家會(huì)對(duì)vue-style-loader會(huì)有疑惑,這里解釋下:

因?yàn)樵趩⒂?b>sourceMap的情況下,style-loader對(duì)background-image屬性沒有處理好,生成的URL鏈接開頭為chrome:// urls,官方庫(kù)中已經(jīng)有人提issue了,。

后來尤雨溪大神fork了官方庫(kù)后開發(fā)了vue-style-loader,完美的解決了background-image問題,當(dāng)時(shí)發(fā)現(xiàn)這個(gè)庫(kù)的時(shí)候真的感動(dòng)的不行啊。。。

下面看一下樣式文件loader的配置

        loaders: [
            {
                test: /.(png|jpe?g|gif)/,
                loader: "url?limit=1024&name=img/[name].[ext]"
            }, {
                test: /.(ttf|eot|svg)$/,
                loader: "url?limit=1024&name=fonts/[name].[ext]"
            },
            {
                test: /.jsx?$/,
                exclude: /node_modules/,
                loader: "babel"
            },
            {
                test: /.(styl|css)$/,
                loader: "vue-style!css?sourceMap!autoprefixer!stylus")
            },
        ]

這樣就可以愉快的在js中引入CSS啦

extract-text-webpack-plugin配置

有時(shí)候我們需要把CSS提取出來,多帶帶打包成一個(gè)文件,這時(shí)候需要用到extract-text-webpack-plugin

修改webpack.config.js

const ExtractTextPlugin = require("extract-text-webpack-plugin");

然后修改我們?cè)械?b>styl-loader配置

{
    test: /.(styl|css)$/,
    loader: ExtractTextPlugin.extract(["vue-style"], "css?sourceMap!autoprefixer!stylus")
},

我們還要在plugin字段配置輸出的CSS文件名稱

plugins:[
    new ExtractTextPlugin("css/[name].css"),
]

執(zhí)行watch命令

`npm run watch`

可以看到css都被提取出來成為多帶帶的文件了。

html-webpack-plugin配置

作用:

自動(dòng)生成HTML

自動(dòng)在HTML引入js,css

自動(dòng)添加hash。

我們?cè)?b>src/config新建html-webpack-plugin.config.js文件,由于配置HTML編譯。

//html-webpack-plugin.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
module.exports = [
    new HtmlWebpackPlugin({
        filename: "index.html",
        chunks: ["common", "index"],
        template: path.resolve(__dirname, "../template/base.html"),
        hash: true,
    }),
]

修改webpack.config.js

執(zhí)行watch命令

npm run watch

可以看到webpack幫我們自動(dòng)生成了html文件。

index.html文件內(nèi)容如下:




    
    
    React同構(gòu)開發(fā)Demo
    


配置browser-sync自動(dòng)刷新

這里我們用到ES7的修飾器特性。目前transform-decorators只有第三方的實(shí)現(xiàn)。

以Index.jsx為例

先修改babel.rc文件:

{
  "presets": [
    "react",
    "es2015"
  ],
  "plugins": [
    "transform-regenerator",
    "transform-decorators-legacy" //添加這個(gè)
  ]
}

在config文件夾添加browser-sync.config.js

修改webpack.config.js

在common文件夾添加bs.js

在React組件中引入bs.js

執(zhí)行watch命令

`npm run watch`

刷新瀏覽器,看到下圖說明自動(dòng)刷新服務(wù)已經(jīng)成功開啟

webapck小技巧

減小路徑的書寫量

resolve: {
    extensions: [".jsx", ".js", ""],
    alias: {
        "common": path.join(__dirname, "module/common")
    }
},

自動(dòng)引入庫(kù),不用每次都寫import

 new webpack.ProvidePlugin({
            React: "react",
            ReactDOM: "react-dom",
            fetch: "isomorphic-fetch",
            promise: "promise"
        }),

區(qū)分生產(chǎn)和開發(fā)環(huán)境

    new webpack.DefinePlugin({
        "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV) || JSON.stringify("development"),
    }),

使用cross-env來跨平臺(tái)設(shè)置環(huán)境變量

  "scripts": {
    "watch": "webpack -d -w --progress --colors --bs",
    "test-server": "anywhere -p 18341 -d ./build",
    "dist": "cross-env NODE_ENV="production" webpack -p"
  }
  

提取公共js、css

    new webpack.optimize.CommonsChunkPlugin({
        name: "common",
        filename: "js/common.js",
    }),

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81369.html

相關(guān)文章

  • 從零開始搭建React同構(gòu)應(yīng)用(三):配置SSR

    摘要:從零開始搭建同構(gòu)應(yīng)用三配置這篇文章來講解來配置,我們先從最簡(jiǎn)單的方法開始,用的方式模擬實(shí)現(xiàn)。影響生產(chǎn)環(huán)境下執(zhí)行效率。最后權(quán)衡下,還是決定使用現(xiàn)在多一套編譯配置的方案。新建,寫入以下內(nèi)容以為例,注意不能少。 從零開始搭建React同構(gòu)應(yīng)用(三):配置SSR 這篇文章來講解來配置server side render,我們先從最簡(jiǎn)單的方法開始,用cli的方式模擬實(shí)現(xiàn)SSR。 demo在這里 ...

    jzzlee 評(píng)論0 收藏0
  • 從零開始搭建React同構(gòu)應(yīng)用(四):搭建Koa Server & 完善SSR

    摘要:從零開始搭建同構(gòu)應(yīng)用四搭建完善上一篇我們使用了的方式測(cè)試了,這篇文章來講如何在前文的基礎(chǔ)上搭建一個(gè),實(shí)現(xiàn)真正意義上的。至此,一個(gè)簡(jiǎn)單的框架已經(jīng)搭建完成,剩下的工作就是結(jié)合工作需要,在里面添磚加瓦啦。 從零開始搭建React同構(gòu)應(yīng)用(四):搭建Koa Server & 完善SSR 上一篇我們使用了CLI的方式測(cè)試了SSR,這篇文章來講如何在前文的基礎(chǔ)上搭建一個(gè)Koa Server,實(shí)現(xiàn)真...

    fizz 評(píng)論0 收藏0
  • 20個(gè)靈魂拷問 徹底搞明白你就是中級(jí)前工程師 【中篇】

    摘要:前端個(gè)靈魂拷問,徹底搞明白你就是中級(jí)前端工程師上篇感覺大家比較喜歡看這種類型的文章,以后會(huì)多一些。所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。此規(guī)范其實(shí)是在推廣過程中產(chǎn)生的。 showImg(https://segmentfault.com/img/bVbwAMU?w=700&h=394); 前端20個(gè)靈魂拷問,徹底搞明白你就是中級(jí)前端工程師...

    MartinDai 評(píng)論0 收藏0
  • 20個(gè)靈魂拷問 徹底搞明白你就是中級(jí)前工程師 【中篇】

    摘要:前端個(gè)靈魂拷問,徹底搞明白你就是中級(jí)前端工程師上篇感覺大家比較喜歡看這種類型的文章,以后會(huì)多一些。所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。此規(guī)范其實(shí)是在推廣過程中產(chǎn)生的。 showImg(https://segmentfault.com/img/bVbwAMU?w=700&h=394); 前端20個(gè)靈魂拷問,徹底搞明白你就是中級(jí)前端工程師...

    coolpail 評(píng)論0 收藏0
  • React 服務(wù)渲染如此輕松 從零開始構(gòu)建前后應(yīng)用

    摘要:今天這篇文章顯然不是討論這兩個(gè)詞語(yǔ)的,我們要嘗試使用最新版,構(gòu)件一個(gè)簡(jiǎn)單的服務(wù)端渲染應(yīng)用。這樣取代了完全由客戶端渲染前后端分離方式模式。在場(chǎng)景下,我們可以使用自身的完成服務(wù)端初次渲染。這也是它在推出短短時(shí)間以來,便迅速走紅的原因之一。 參加或留意了最近舉行的JSConf CN 2017的同學(xué),想必對(duì) Next.js 不再陌生, Next.js 的作者之一到場(chǎng)進(jìn)行了精彩的演講。其實(shí)在更早...

    binaryTree 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<