webpack1 到 webpack2 的一些坑

前言

本篇文章只為了說明在 webpack 的配置上忧侧,1 到 2的普遍改動石窑,對于 webpack 內置的改動,大家可以去官網看蚓炬。

直接貼代碼

先貼一個我在 webpack1 時使用的配置松逊。

var path = require('path');
var autoprefixer = require('autoprefixer');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');
module.exports = {
    entry: {
        'Index': './app/index.js'
    },
    output: {
        path: path.join(__dirname, 'devBuild'),
        publicPath: '/',
        filename: "[name]/[name].[hash:5].js"
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: "babel",
                query: {
                    presets: ['react', 'es2015']
                }
            },
            {
                test: /\.scss$/,
                loader: ExtractTextPlugin.extract('style', 'css!postcss!sass')
            },
            {
                test: /\.less$/,
                loader: ExtractTextPlugin.extract('style', 'css!postcss!less')
            },
            {test: /\.css$/, loader: ExtractTextPlugin.extract('style', 'style!css')},
            {test: /\.(png|jpg|gif)$/, loader: "url?limit=8192&name=./img/[name].[ext]"},
            {test: /\.json$/, loader: "json"},
            {test: /\.svg/, loader: 'svg-url-loader'}
        ]
    },
    url: {
        dataUrlLimit: 2048
    },
    resolve: {
        modulesDirectories: ['node_modules', path.join(__dirname, '../node_modules')],
        extensions: ['', '.js', '.json']
    },
    devtool: 'source-map',
    postcss: function () {
        return [autoprefixer];
    },
    plugins: [
        new ExtractTextPlugin('[name]/[name].[hash:5].css'),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'app/index.html',
            chunks: ['Index']
        }),
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': JSON.stringify('development')
                // 'NODE_ENV': JSON.stringify('production')
            }
        })
    ]
};

對于配置項的含義不懂得朋友可以先看看文檔。肯夏。经宏。

然后貼一下修改后的配置

var path = require('path');
var autoprefixer = require('autoprefixer');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');
var OpenBrowserPlugin = require('open-browser-webpack-plugin');

module.exports = {
    entry: {
        'Index': './app/index.js'
    },
    output: {
        path: path.join(__dirname, 'devBuild'),
        publicPath: '/',
        filename: "[name]/[name].[hash:5].js"
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: [path.resolve(__dirname, 'node_modules')],
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ['react', 'es2015'],
                        plugins: ['syntax-dynamic-import']
                    }
                }
            },
            {
                test: /\.scss$/,
                use: ExtractTextPlugin.extract(['css-loader', {
                    loader: 'postcss-loader',
                    options: {
                        plugins: (loader) => [
                            require('postcss-import')({root: loader.resourcePath}),
                            require('autoprefixer')(), //CSS瀏覽器兼容
                            require('cssnano')()  //壓縮css
                        ]
                    }
                }, 'sass-loader'])
            },
            {
                test: /\.css$/, use: ExtractTextPlugin.extract(['css-loader', {
                loader: 'postcss-loader',
                options: {
                    plugins: (loader) => [
                        require('postcss-import')({root: loader.resourcePath}),
                        require('autoprefixer')(), //CSS瀏覽器兼容
                        require('cssnano')()  //壓縮css
                    ]
                }
            }])
            },
            {test: /\.(png|jpg|gif)$/, use: ["url-loader?limit=8192&name=./img/[name].[ext]"]},
            {test: /\.svg/, use: ['svg-url-loader']}
        ]
    },
    resolve: {
        modules: ['node_modules', path.join(__dirname, '../node_modules')],
        extensions: ['.js', '.json', '.scss', 'css']
    },
    devtool: 'source-map',
    plugins: [
        new ExtractTextPlugin('[name]/[name].[hash:5].css'),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'app/index.html',
            chunks: ['Index']
        }),
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': JSON.stringify('development')
                // 'NODE_ENV': JSON.stringify('production')
            }
        }),
        // new webpack.LoaderOptionsPlugin({
        //  debug: false,
        //  options: {
        //      postcss: [
        //          autoprefixer()
        //      ],
        //  },
        // }),
        new OpenBrowserPlugin({url: 'http://localhost:1234'})
    ]
};

從上到下來說吧犀暑,首先就 module 內的變化,由原來的 loaders 字段改為了 rules 字段烁兰,然后 rules 內耐亏,每個匹配項的 loader 改為了 use,原 loader 項后面的字符串改為了數組的形式沪斟,其中的一些配置放在了 options 中广辰,然后是 resolve 的改動,modulesDirectories 字段改為了 modules主之,原本單獨寫的 postcss 配置現在要寫在 options 中择吊,或者在最后面 注釋掉的 LoaderOptionsPlugin 中來寫。

目前我用到的改動基本上就是這些了杀餐,其他的大家可以查一查相應的改動干发。

后面一篇文章會說明一下,改動過程中出現的一些錯誤的原因 : )

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末史翘,一起剝皮案震驚了整個濱河市枉长,隨后出現的幾起案子,更是在濱河造成了極大的恐慌琼讽,老刑警劉巖必峰,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異钻蹬,居然都是意外死亡吼蚁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門问欠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肝匆,“玉大人,你說我怎么就攤上這事顺献∑旃” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵注整,是天一觀的道長能曾。 經常有香客問我,道長肿轨,這世上最難降的妖魔是什么寿冕? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮椒袍,結果婚禮上驼唱,老公的妹妹穿的比我還像新娘。我一直安慰自己驹暑,他們只是感情好曙蒸,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布捌治。 她就那樣靜靜地躺著,像睡著了一般纽窟。 火紅的嫁衣襯著肌膚如雪肖油。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天臂港,我揣著相機與錄音森枪,去河邊找鬼。 笑死审孽,一個胖子當著我的面吹牛县袱,可吹牛的內容都是我干的。 我是一名探鬼主播佑力,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼式散,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了打颤?” 一聲冷哼從身側響起暴拄,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎编饺,沒想到半個月后乖篷,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡透且,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年撕蔼,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秽誊。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲸沮,死狀恐怖,靈堂內的尸體忽然破棺而出锅论,到底是詐尸還是另有隱情诉探,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布棍厌,位于F島的核電站,受9級特大地震影響竖席,放射性物質發(fā)生泄漏耘纱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一毕荐、第九天 我趴在偏房一處隱蔽的房頂上張望束析。 院中可真熱鬧,春花似錦憎亚、人聲如沸员寇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝶锋。三九已至陆爽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扳缕,已是汗流浹背慌闭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躯舔,地道東北人驴剔。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像粥庄,于是被迫代替她去往敵國和親丧失。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • GitChat技術雜談 前言 本文較長惜互,為了節(jié)省你的閱讀時間布讹,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,674評論 7 110
  • 前言 webpack2和vue2已經不是新鮮東西了载佳,滿大街的文章在講解webpack和vue炒事,但是很多內容寫的不是...
    技術宅小青年閱讀 6,517評論 4 43
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺,特此分享以備自己日后查看蔫慧,也希望更多的人看到...
    小小字符閱讀 8,140評論 7 35
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,273評論 4 31
  • 菩提本無樹挠乳,明鏡亦非臺,本來無一物姑躲,何處惹塵埃睡扬。心中無法解脫,是因為不能放下黍析,放下執(zhí)念卖怜,把一切看淡,才能獲得輕松阐枣,...
    湯河水閱讀 550評論 4 4