Webpack记录

Webpack是什么

webpack是一种模块化的打包方法,每一个文件都是一个模块使用id关联。它比grunt/gulp要强大很多,所以在很多项目中已经替代了其他的打包工具。

开始使用Webpack
1、安装(需要先安装node,npm)
// 全局安装 (一般选择全局安装)
npm install -g webpack 
// 安装到项目路径
npm install --save-dev webpack (使用--save-dev回添加到package.json)
npm install --save-dev webpack-dev-server
// 构建本地服务器
2. webpack.conf配置

基本配置webpack.base.conf.js

module.exports = {
    devtool: 'source-map',// 有四种配置:
    // 1. sorce-map 打包很慢 
    // 2. cheap-module-source-map 打包快,影响调试 
    // 3. eval-source-map 打包快适合dev阶段 
    // 4. cheap-module-eval-sorce-map  同上
    entry: {
        app: __dirname + "./src/main.js" // 这是入口文件
        // __dirname是node中的一个全局变量指向项目根目录
    },
    output: {
        path: __dirname + "dist",// 打包后的输出文件目录
        filename: "[name].js" // 输出文件名
    },
    devServer: {
        contentBase: './dist',// 根目录
        historyApiFallback: true, // 页面跳转 true 单页
        inline: true, // 同步页面
        hot: true, // 热加载
        port: 8080, // 端口
        host:'localhost', 
        autoOpenBrowser: true, // 启动时自动打开页面
        useEslint: true,
        proxyTable: {// 配置代理
            '/api': {
                target: 'http://localhost:8080',
                pathRewrite: {
                    '^api': '/static/mock'
                }
            }
        }
    }
},
resolve: {
  extensions: ['.js', '.vue', '.json'], // 忽略文件后缀
  alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'), // @指向src目录,可以自己配置(短路径)
      'styles': resolve('src/assets/styles')
      // 在其他文件引入css文件 import 'styles/common.css'
  }
},
module: {
    rules: [
     // 这里配置各种loader, vue/babel/css/url/sacc/stylus...
     解析各种文件让浏览器可以识别
    ]
},
plugins: {
   // 下面介绍 
}
3、package.json配置指令
"scripts": {
    "start": "npm run dev",
    "dev": "webpack-dev-server --inline --process --config build/webpack.dev.conf.js", 
    "build": "node build/build.js"
}
// dev指令执行dev文件 build指令自行build文件内部加载prod文件及其他的配置
//项目结构
'build'
    'build.js'
    'webpack.base.conf.js'
    'webpack.dev.conf.js'
    'webpack.prod.confjs'
'config'
    'dev.env.js'
    'index.js'
    'prod.env.js'
'src'
    '...其他文件'
'static'
    'mock'
        '...本地json数据'
'index.html'
'package.json'
'.babelrc'
4、Module配置
module: {
    rules: [
        {
            test: /\.js$/,
            loader: 'babel-loader',
            include: [resolve('node_modules/webpack-dev-server/client')], // 包含
            exclude: /node-modules/ // 过滤掉
        },
        {
            test: /\.css$/,
            use: [
                {
                 loader: 'style-loader'   
                },{
                  loader: 'css-loader',
                  options: {
                      modules: true
                  }
                },{
                    loader: 'postcss-loader'
                }
            ]
        }
    ]
}
// 使用loader需要安装
npm install --save-dev style-loader css-loader balbel-loader
// 自动添加css前缀
npm install --save-dev postcss-loader autoprefixer

// .babelrc 
{
    "presets": [
        ["env", {
          "modules": false,
          "targets": {
            "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
          }
        }],
        "stage-2"
    ],
    "plugins": ["transform-vue-jsx", "transform-runtime"]
    // 使用的插件
}
5、Plugins配置
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')// 生成一个新的index.html
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const cleanWebpackPlugin=require('clean-webpack-plugin') //每次build先删除dist
const CopyWebpackPlugin = require('copy-webpack-plugin')

plugins: [
    new HtmlWebpackPlugin({
        filename: path.resolve(__dirname, '../dist/index.html', // 新的index.html地址
        tempalte: 'index.html', // 模板地址
        minify:{
            collapseWhitespace: true //折叠空白区域 也就是压缩代码
        }
    }),
    new webpack.optimize.UglifyJsPlugin(),// 压缩js
    new ExtractTextPlugin("styles/[name].css"),
    // 分离css js (styles 短路径在resolve有配置)
    // 安装 npm install --save-dev extract-text-webpack-plugin
    new CleanWebpackPlugin(['dist']), //传入数组,指定要删除的目录
    new CopyWebpackPlugin([ // 复制插件 需要安装
      {
        from: path.resolve(__dirname, '../static'),
        to: 'static', // dist/static
        ignore: ['.*']
      }
    ]),
    new webpack.HotModuleReplacementPlugin(), //热加载插件
    new webpack.NamedModulesPlugin() // 显示文件名而不是id
]
webpack的常用配置记录,当然webpack的强大不仅记录的这些,这些配置是比较常用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值