webpack学习笔记-7-开发环境和生产环境

1.背景

    前面的几篇文章介绍了如何使用webpack进行开发,包括webpack的功能,使用webpack打包,webpack的几个常用loader,plugin,使用webpack-dev-server调试。但是开发环境和生产环境是有区别的,开发完成后的项目还需要再进行一些其它处理才能构建到生产环境。比如,在开发阶段我们是不需要对js代码进行压缩处理的,而生产环境就有这种需求。webpack命令提供了使用不同配置文件进行打包过程的参数: --config。这样我们可以写不同的配置文件,开发阶段和生产阶段使用不同的配置文件进行构建就可以了。

    下面介绍一下,js代码压缩插件的使用和如何在开发环境和生产环境打包。

2.UglifyJsPlugin

    webpack内置js代码压缩插件:UglifyJsPlugin,使用时不需要额外安装,配置文件写法:

var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlPlugin = require('html-webpack-plugin');

var extractCss = new ExtractTextPlugin('[name]-one.css');
var extractLess = new ExtractTextPlugin('[name]-two.css');
module.exports = {
    // 入口文件路径,__dirname是根目录
    entry: __dirname + '/src/main.js',
    // 打包生成文件
    output: {
        path: __dirname + '/output',
        filename: 'main.js'
    },

    module: {
        rules: [
            {
                test: /\.css/,
                use: extractCss.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader'
                    ]
                })
            },
            {
                test: /\.less$/,
                use: extractLess.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader',
                        'less-loader'
                    ]
                })
            },
            {
                test: /\.jpeg$/,
                // use: 'url-loader?limit=1024&name=[path][name].[ext]&publicPath=output/',
                use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=./',
            },
        ]
    },

    plugins: [
        new HtmlPlugin(),
        new webpack.optimize.UglifyJsPlugin(),
        extractCss,
        extractLess
    ]
}
3.开发环境和生产环境

    webpack命令可以附带参数:--config,用来指明打包使用的配置文件,若没有这个参数,则默认读取webpack.config.js。作为例子,我们写两个config文件,一个是webpack.dev.config.js,用于开发环境的配置,一个是webpack.prod.config.js。用于生产环境的配置。在我们的例子中,两者的区别就是开发环境打包中没有使用js代码压缩插件而生产环境打包使用了。

// webpack.dev.config.js

var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlPlugin = require('html-webpack-plugin');

var extractCss = new ExtractTextPlugin('[name]-one.css');
var extractLess = new ExtractTextPlugin('[name]-two.css');
module.exports = {
    // 入口文件路径,__dirname是根目录
    entry: __dirname + '/src/main.js',
    // 打包生成文件
    output: {
        path: __dirname + '/output',
        filename: 'main.js'
    },

    module: {
        rules: [
            {
                test: /\.css/,
                use: extractCss.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader'
                    ]
                })
            },
            {
                test: /\.less$/,
                use: extractLess.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader',
                        'less-loader'
                    ]
                })
            },
            {
                test: /\.jpeg$/,
                // use: 'url-loader?limit=1024&name=[path][name].[ext]&publicPath=output/',
                use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=./',
            },
        ]
    },

    plugins: [
        new HtmlPlugin(),
        extractCss,
        extractLess
    ]
}


// webpack.prod.config.js

var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlPlugin = require('html-webpack-plugin');

var extractCss = new ExtractTextPlugin('[name]-one.css');
var extractLess = new ExtractTextPlugin('[name]-two.css');
module.exports = {
    // 入口文件路径,__dirname是根目录
    entry: __dirname + '/src/main.js',
    // 打包生成文件
    output: {
        path: __dirname + '/output',
        filename: 'main.js'
    },

    module: {
        rules: [
            {
                test: /\.css/,
                use: extractCss.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader'
                    ]
                })
            },
            {
                test: /\.less$/,
                use: extractLess.extract({
                    fallback: 'style-loader',
                    use: [
                        'css-loader',
                        'autoprefixer-loader',
                        'less-loader'
                    ]
                })
            },
            {
                test: /\.jpeg$/,
                // use: 'url-loader?limit=1024&name=[path][name].[ext]&publicPath=output/',
                use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=./',
            },
        ]
    },

    plugins: [
        new HtmlPlugin(),
        new webpack.optimize.UglifyJsPlugin(),
        extractCss,
        extractLess
    ]
}

这样,我们在开发环境进行打包时,输入命令 webpack --config ./webpack.dev.config.js;在生产环境打包则输入 webpack --config ./webpack.prod.config.js即可。

为了进一步方便我们的操作,可以在package.json里配置一下命令:

  "scripts": {
    "dev": "webpack --config ./webpack.dev.config.js",
    "build": "webpack --config ./webpack.prod.config.js"
  },

这样,开发环境时输入命令 npm run dev;生产环境输入 npm run build。

4.demo

地址:https://github.com/KIDFUCKER/webpack-demo.git

分支:v9-UglifyJsPlugin

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值