webpack配置超详细注释解读

本篇文章主要是在学习typescript过程中,对webpack的一些配置,做了一些配置项详细注解,光看文章就可以详解了解webpack基本配置项所代表的内容和配置方法,个人学习之余分享出来,仅供参考,欢迎大家指正~
那么我们开始吧~

const HtmlWebpackPlugin = require('html-webpack-plugin')
// const CleanWebpackPlugin = require('clean-webpack-plugin') 需要解构,正确方式如下
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
//单线程压缩代码 UglifyJsPlugin
//ParallelUglifyPlugin 会开启多个子进程,每个子进程还是通过UglifyJS去压缩代码。变成了并行处理该压缩,并行处理多个子任务,效率更高。
const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');

module.exports = {
  entry: "./src/index.js", //入口文件
  output: {
    filename: "main.js" //编译后的文件叫什么
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js'] //在import的时候,可以省略后缀:import xxx from './src/index'不必写成 './src/index.js'
  },
  module: {
    rules: [{
      test: /\.tsx?$/, //遇到这些类型的文件,应该使用什么(loader)去解析
      use: 'ts-loader',
      exclude: /node_modules/ //排除某些文件:在编译时,不去处理node_modules下面的文件
    }]
  },
  devtool: process.env.NODE_ENV === 'production' ? false : 'inline-source-map', //判断是开发还是生产,决定是否使用source-map,来减少打包时间,减少资源浪费
  //webpack-dev-server 也有一些参数可以配置:本地开发服务器配置
  devServer: {
    open: true, //第一次构建完成后自动打开浏览器
    contentBase: './dist', //开发环境运行时,是基于哪个文件夹作为根目录运行的
    stats: 'errors-only', //webpack启动后在控制台打印哪些信息
    compress: false, //不启用压缩:注意这里的压缩是文件的压缩如gzip等
    host: 'localhost',
    port: 8089
  },
  plugins: [
    new CleanWebpackPlugin({
      //build之前清理一下指定路径
      cleanOnceBeforeBuildPatterns: ['./dist']
    }),
    new HtmlWebpackPlugin({
      //编译的时候使用哪个html模板
      template: './src/template/index.html',
      minify: {
        removeComments: false, // 改为false
        collapseWhitespace: false, // 改为false
        removeAttributeQuotes: false // 改为false
        }
    }),
    new ParallelUglifyPlgin({
    	// 使用 ParallelUglifyPlugin 并行压缩输出JS代码
    	//uglifyJS:用于压缩 ES5 代码时的配置,Object 类型,直接透传给 UglifyJS 的参数。
        //uglifyES:用于压缩 ES6 代码时的配置,Object 类型,直接透传给 UglifyES 的参数。
    	test: /.js$/g, //使用正则去匹配哪些文件需要被 ParallelUglifyPlugin 压缩,默认是 /.js$/.
		include: [],//使用正则去包含被 ParallelUglifyPlugin 压缩的文件,默认为 [].
        exclude: [],//使用正则去不包含被 ParallelUglifyPlugin 压缩的文件,默认为 [].
		cacheDir: '',//缓存压缩后的结果,下次遇到一样的输入时直接从缓存中获取压缩后的结果并返回,cacheDir 用于配置缓存存放的目录路径。默认不会缓存,想开启缓存请设置一个目录路径。
		workerCount: '',//开启几个子进程去并发的执行压缩。默认是当前运行电脑的 CPU 核数减去1。
		sourceMap: false,//是否为压缩后的代码生成对应的Source Map, 默认不生成,开启后耗时会大大增加,一般不会将压缩后的代码的sourceMap发送给网站用户的浏览器。
    	uglifyJS: {
    		output: {
    			//是否输出可读性较强的代码,即会保留空格和制表符,默认为输出,为了达到更好的压缩效果,可以设置为false
    			beautify: false,
    			//是否保留代码中的注释,默认为保留,为了达到更好的压缩效果,可以设置为false
				comments: false
			},
			compress: {
				dead_code: true,
				drop_console: false, //删除console.*,默认为不删除
				//是否在UglifyJS删除没有用到的代码时输出警告信息,默认为输出,可以设置为false关闭这些作用不大的警告
				warnings: false,
				//是否内嵌虽然已经定义了,但是只用到一次的变量,比如将 var x = 1; y = x, 转换成 y = 5, 
				//默认为不转换,为了达到更好的压缩效果,可以设置为false
				collapse_vars: true,
				//是否提取出现了多次但是没有定义成变量去引用的静态值,比如将 x = 'xxx'; y = 'xxx'  转换成var a = 'xxxx'; x = a; y = a; 
				//默认为不转换,为了达到更好的压缩效果,可以设置为false
				reduce_vars: true
			}
    	}
    })
  ]
}

补充知识:rocess.env.NODE_ENV 是从哪里来的
在 package.json 文件中配置

"start": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.js",
Angular 使用 webpack 来构建和打包项目,webpack 配置文件默认情况下是隐藏的,使用 Angular CLI 提供的 `ng eject` 命令可以将默认的 webpack 配置文件转换为标准的 webpack 配置文件,并将所有依赖项添加到 `package.json` 文件中。下面是一个示例的 Angular webpack 配置文件及注释: ```javascript const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { // 入口文件 entry: { 'polyfills': './src/polyfills.ts', 'app': './src/main.ts' }, // 输出文件 output: { path: path.resolve(__dirname, 'dist'), // 输出文件的名称 filename: '[name].[hash].js', // chunk 文件的名称 chunkFilename: '[id].[hash].chunk.js', // 配置资源文件的路径 publicPath: '/' }, // 模块加载器 module: { rules: [ // 处理 TypeScript 文件 { test: /\.ts$/, loaders: [ { loader: 'awesome-typescript-loader', options: { configFileName: path.resolve(__dirname, 'tsconfig.json') } } , 'angular2-template-loader' ] }, // 处理 HTML 文件 { test: /\.html$/, loader: 'html-loader' }, // 处理样式文件 { test: /\.css$/, exclude: path.resolve(__dirname, 'src', 'app'), loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader?sourceMap' }) }, // 处理项目中的组件样式文件 { test: /\.css$/, include: path.resolve(__dirname, 'src', 'app'), loader: 'raw-loader' } ] }, // 插件 plugins: [ // 生成 HTML 文件 new HtmlWebpackPlugin({ template: 'src/index.html' }), // 配置全局变量 new webpack.DefinePlugin({ 'process.env': { 'NODE_ENV': JSON.stringify('production') } }), // 提取公共模块 new webpack.optimize.CommonsChunkPlugin({ name: ['app', 'polyfills'] }), // 提取样式文件 new ExtractTextPlugin('[name].[hash].css') ], // 解析模块请求的选项 resolve: { extensions: ['.ts', '.js'] }, // 配置 devServer devServer: { historyApiFallback: true, stats: 'minimal' }, // 配置 source map devtool: 'source-map' }; ``` 以上是一个基本的 Angular webpack 配置文件的示例,其中包括了入口文件、输出文件、模块加载器、插件、解析模块请求的选项、devServer 配置以及 source map 配置等等。注释详细说明了每个配置项的作用和配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值