webpack.config

webpack一些配置,要说的大部分在代码注释里了

// options: {
//     presets: [['@babel/preset-env',{
//       // targets: {
//       //   chrome: "67",
//       // },
//       useBuiltIns: 'usage' // 可以按需打包编译Es6的代码,使得打包出来的js没那么大
//     }]],
//     plugins: [["@babel/transform-runtime",
//       {
//         "corejs": 2,
//         "helpers": true,
//         "regenerator": true,
//         "useESModules": false
//       }
//     ]] // 开发第三方库的时候可以用到,如果用到这个插件,那还需要安装@babel/runtime-corejs2 --save
// }


// 官方插件 HtmlWebpackPlugin 会在打包结束后,自动生成一个html文件,并把
// 打包生成的js自动引入到这个html文件中
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 第三方插件 删除之前的打包项
const {CleanWebpackPlugin} = require('clean-webpack-plugin');

var path = require('path');
var webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports = {
    // 声明是开发模式还是生产模式
    mode:'development',

    // source-map会映射出错误位置并且单独打包成一个文件,加了inline会把映射代码写入打包的bundle.js文件中,并且精确到了哪行那列
    // 加了cheap就是精确度没那么高但打包速度会快一些,加了module就是连模块的映射一起写入
    // 开发环境建议用cheap-module-eval-source-map,线上建议可以用cheap-module-source-map
    devtool: 'cheap-module-inline-source-map', 
    
    // entry:__dirname+'/app/main.js',
    entry:['./src/js/app.js'],

    // plugins 会在webpack运行到某个时刻的时候,帮你做一些事情
    plugins: [
        // new ExtractTextPlugin({
        //   filename: utils.assetsPath('[name]/styles.[contenthash].css')
        // })
        new CleanWebpackPlugin({
            // //将日志写入控制台
            // //(总是在dry为真时启用)
            // verbose: true,
            // // 模拟文件的删除
            // dry: true,
            // cleanOnceBeforeBuildPatterns: ['./dist/*.*']
        }),
        new HtmlWebpackPlugin({
            // 模板
            template: './index.html',
           // 标题
            title: 'Output Management',
            // 压缩 去掉所有空格
            minify: {
                collapseWhitespace: true //false | true
            },
            // 添加hash
            hash: false
        }),
        // HMR热更新要使用的插件
        // new webpack.NamedModulesPlugin(),
        // new webpack.HotModuleReplacementPlugin()
    ],

    output: {
      path:path.resolve(__dirname,'./dist'),
      // publicPath: 'http://cdn.com.cn',  // 为生成的js文件加上公用的字符
      filename: '[name].bundle.js',
      chunkFilename: '[name].chunk.js'
    },

 	  module: {
        rules: [{
            test: /\.(js|jsx)$/,
            exclude: /node_modules/, //屏蔽不需要处理的文件(文件夹)(可选)
            loader: 'babel-loader'
        },{
            test: /\.less$/,
            use:[
                {
                  loader: 'style-loader'
                },
                {
                    loader: 'css-loader',
                    options: {
                        // minimize: true,
                        modules: true,
                        // localIdentName: '[name]_[hash:base64:5]',
                        // 保证less里面引入的less文件能再次从下到上编译
                        importLoaders: 2,
                        // camelCase: '[name]'
                    }
                },
                {loader: 'less-loader'},
                // postcss目前作用是为一些css属性添加前缀 例如“-webkit-”
                {loader: 'postcss-loader'}
            ]
            // 方便样式模块化独立开发
            // loader: 'style-loader!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'
        },{
          test: /\.css$/,
            use:[
                'style-loader',
                'css-loader',
                'postcss-loader'
            ]
        },{
          test: /\.(png|jpg|gif)$/,
          use: {
            loader: 'url-loader',
            options: {
              // placeholder 占位符 例下面的:[ext]和[hash]
              name: '[name].[ext]',
              outputPath: 'img/', //输出文件所处的自动生成的地址
              limit: 2048   //表示2KB,大于2KB就打包成文件形式,小于2KB就直接以base64形式打包到bundle.js里
            }
          }
        },{
          test: /\.(eot|ttf|svg|woff)$/,
          use: {
            loader: 'file-loader',
          }
        }]
    },

    devServer:{
    	// hot: true, // 热更新要使用的配置
        // hotOnly: true,
		   contentBase: './dist', //默认webpack-dev-server会为根文件夹提供本地服务器,如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录(本例设置到"build"目录)
        open: true, // 自动打开一个浏览器显示项目
        // proxy: {
        //   "/api": "http://localhost:3000" // 跨域代理 例如访问localhost:8080下的“./api”会转到localhost:3000
        // },
        historyApiFallback: {index:'./index.html'}, //在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html
        inline: true, //设置为true,当源文件改变时会自动刷新页面
        port: 8080, //设置默认监听端口,如果省略,默认为"8080"
	  },

	  resolve: {
        //自动扩展文件后缀名,意味着我们require模块可以省略不写后缀名
        extensions: ['*','.ts', '.js', '.less', '.sass']
    },
};

webpack有很多记不住的东西,仍然需要不断的查询文档来获取解决途径,以上配置也不是完善的。跟脚手架肯定也没法比。不对的地方欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值