您的位置:首页 > Web前端 > Webpack

webpack 基础配置

2019-05-05 21:34 381 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/baidu_27769027/article/details/89855830

本基础配置基于 webpack@3.0 版本

文章目录

  • 常用loader
  • 入口与输出

    entry

    • 单个入口打包

    entry设置为一个入口,打包出来的文件只有一个js。

    __dirname
    为项目根路径(nodejs)。

    module.exports = {
    // 入口文件路径
    entry: __dirname + '/index.js',
    }
    • 多个入口打包

    entry
    设置为一个对象,包含多个属性(入口),打包后为多个文件。

    module.exports = {
    // 入口文件路径
    entry: {
    app: __dirname + '/index.js',
    vendor: ['angular', '@uirouter/angularjs']
    }
    }
    • 提取第三方模块

    第三方模块由于在资源更新时无需更新,所以打包成单独的一个文件进行缓存

    module.exports = {
    ...
    // 插件
    plugins: [
    ...
    // 防止第三方模块的文件 hash 值发生变化
    new webpack.HashedModuleIdsPlugin(),
    // 提取第三方模块
    new webpack.optimize.CommonsChunkPlugin({
    // 对应的entry数组vendor
    name: 'vendor',
    filename: 'js/vendor-[chunkhash:6].js'
    })
    ]
    }
    • 提取公共模块

    将重复的模块提取出来单独作为一个文件(发生在提取第三方模块之后)。

    module.exports = {
    ...
    // 插件
    plugins: [
    // 提取第三方模块
    ...
    // 提取公共模块
    new webpack.optimize.CommonsChunkPlugin({
    name: 'common',
    filename: 'js/common-[chunkhash:6].js'
    })
    ]
    }

    output

    • [name]
      :文件名变量
    • [hash]
      :如果所有文件中,有一个文件发生变化则重新生成hash值,一般用于版本更新,[hash]作为目录
    • [chunkhash]
      :只有当前文件变化则重新生成chunkhash值,一般用于js文件
    • [contenthash]
      :用于css的hash值(css是以js的方式生成,需和js的chunkhash分开,不然css的变化会引起js的hash值变化),在extract-text-webpack-plugin插件中使用:
      new ExtractTextWebpackPlugin('css/base-[contenthash:6].css')
    • publicPath
      :输出目录对应的公开URL,会影响后面导入的css以及css中引入的字体文件路径
    module.exports = {
    // 打包输出路径
    output: {
    path: __dirname + '/dist',
    filename: 'js/[name]-[chunkhash:6].js',
    publicPath: '/'
    }
    }

    常用loader

    清理打包目录

    // 安装所需包
    $ cnpm install --save-dev clean-webpack-plugin
    
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    
    module.exports = {
    plugins: [
    new ClearWebpackPlugin(['dist'])
    ]
    }

    生成入口模板

    // 安装所需包
    $ cnpm install --save-dev html-webpack-plugin
    
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
    plugins: [
    new ClearWebpackPlugin({
    filename: 'index.html',
    // 默认模板
    template: './index.html'
    })
    ]
    }

    es6转义es5

    // 安装所需包
    $ cnpm install babel-loader babel-core babel-preset-es2015
    
    // 配置js转义规则
    module.exports = {
    module: {
    rules: [
    {
    test:/\.js$/,
    use: [
    {
    loader: 'babel-loader',
    options: {
    presets: ['es2015']
    }
    }
    ],
    // 排除的文件夹
    exclude: /node_modules/
    }
    ]
    }
    }

    css合并

    • 合并为单个文件

    loader加载顺序: less-loader > css-loader > style-loader,这里使用css-loader的压缩功能。

    // 安装所需包
    $ cnpm install --save-dev extract-text-webpack-plugin css-loader style-loader less-loader less
    
    // 配置css/less转义规则
    let ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
    
    module.exports = {
    module: {
    rules: [
    {
    test: /\.(css|less)$/,
    // 合并
    use: ExtractTextWebpackPlugin.extract({
    fallback: 'style-loader',
    use: [
    {
    loader: 'css-loader', options: {
    // 启用压缩
    minimize: true
    }
    },
    {loader: 'less-loader'}
    ]
    })
    }
    ]
    },
    plugins: [
    new ExtractTextWebpackPlugin('css/style-[contenthash:6].css')
    ]
    }
    • 合并为多个文件

    使用多个

    ExtractTextWebpackPlugin
    实例生成,用
    exclude,include
    参数隔离第三方库。

    // 安装所需包
    $ cnpm install --save-dev extract-text-webpack-plugin css-loader style-loader less-loader less
    
    // 配置css/less转义规则
    let ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
    
    // 生成多个实例,base存放第三方库,app为自定义
    let baseCss = new ExtractTextWebpackPlugin('css/base-[contenthash:6].css');
    let appCss = new ExtractTextWebpackPlugin('css/app-[contenthash:6].css');
    module.exports = {
    module: {
    rules: [
    {
    test: /\.(css|less)$/,
    // 合并
    use: appCss.extract({
    fallback: 'style-loader',
    use: [
    {
    loader: 'css-loader', options: {
    // 启用压缩
    minimize: true
    }
    },
    {loader: 'less-loader'}
    ]
    }),
    // 隔离第三方库
    exclude: /node_modules/
    },
    {
    test: /\.css$/,
    // 合并
    use: baseCss.extract({
    fallback: 'style-loader',
    use: [
    {
    loader: 'css-loader', options: {
    // 启用压缩
    minimize: true
    }
    }
    ]
    }),
    // 隔离第三方库
    include: /node_modules/
    }
    ]
    },
    plugins: [
    baseCss, appCss
    ]
    }

    css引入的文件

    字体文件,图片

    // 安装所需包
    $ cnpm install file-loader
    
    module.exports = {
    module: {
    rules: [
    {
    // 加载css中的字体文件
    test: /(\.ttf|\.woff2|\.woff|\.eot|\.svg|\.dtd)/,
    use: [
    {
    loader: "file-loader"
    }
    ]
    }
    ]
    }
    }

    html模板转换字符串

    // 安装所需包
    $ cnpm install raw-loader
    
    module.exports = {
    module: {
    rules: [
    {
    // 将html文件转换为字符串
    test: /\.html$/,
    use: [{
    loader: "raw-loader"
    }]
    }
    
    ]
    }
    }

    devServer

    npm --save-dev webpack-dev-server

    module.exports = {
    devServer: {
    // 服务器文件路径
    contentBase: './dist',
    // 不跳转url
    historyApiFallback: true,
    // inline模式url不用变化
    inline: ture,
    // 热更新
    hot: true,
    // 开启GZIP
    compress: true,
    }
    }
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: