webpack02 --常用配置

使用webpack的步骤

webpack安装的插件或者loader使用的时候加载的方式是自右向左,自下而上的顺序加载。

  • 初始化一个项目 npm init -y (也可以使用 npm init 回车 自主配置)
npm i  webpack webpack-cli  --save-dev
// --save 就是说要把当前安装的包的信息存放到package.json中; 
//-dev 相当于告诉webpack 这个包是开发所需要的依赖
npm i  webpack webpack-cli  -D
npm i  webpack webpack-cli --dev // 不能保证当前这个包一定会体现在package.json中

npm i jquery --save 就是说要把当前安装的包的信息存放到package.json中 默认是生产依赖
npm i jquery -S  // -S == --save
npm i jquery //默认是安装到生产环境
  • loader:主要用来处理文件的, 将不是js的文件编译成JS可识别的文件
  • plugins:

清空文件

clean-webpack-plugin:每次构建前清理 /dist 文件夹

安装 cnpm install clean-webpack-plugin -D

安装成功后的package.json

"devDependencies": {
    "clean-webpack-plugin": "^3.0.0",
  }

webpack.config.js

const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin"); // 引入清空文件插件
module.exports={
	entry:"./src/index.js",
	output:{
		path:path.resolve(__dirname,"dist"),
		filename:"bundle.js"
	},
	plugins:[ //插件
		new CleanWebpackPlugin({
			//cleanOnceBeforeBuildPatterns: ['**/*', '!static-files*'],
			//'**/*':匹配的文件
			//'!static-files*':不清除的文件
		}),//每次清空dist中的老文件
	]
}

生成html,自动添加资源文件

HtmlWebpackPlugin:该插件将为你生成一个 HTML5 文件, 其中包括使用 script 标签的 body 中的所有 webpack 包。

安装 cnpm install -D html-webpack-plugin / yarn add --dev html-webpack-plugin

安装成功后的package.json

"devDependencies": {
   "html-webpack-plugin": "^4.5.0",
  }

webpack.config.js

const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");// 引入清空文件插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports={
	entry:"./src/index.js",
	output:{
		path:path.resolve(__dirname,"dist"),//
		filename:"bundle.js"
	},
	plugins:[
	new CleanWebpackPlugin(),//每次清空dist中的老文件
	new HtmlWebpackPlugin({
		title:"My App", //用于生成的HTML文档的标题
		filename:"dist/admin.html", //写入HTML的文件。默认为index.html。可以指定一个子目录
		template:"public/index.html ", //指定webpack模板的相对或绝对路径。默认使用src/index.ejs
		hash:, //如果是true,则将唯一的webpack编译哈希值附加到所有包含的脚本和CSS文件中。这对于清除缓存很有用
		chunks:, //仅允许您添加一些块(例如,仅单元测试块)
		minify:true ,//控制是否以及以何种方式最小化输出。默认false
	}),//简化HTML文件的创建,自动引入js文件
	]
}

修改title,需要结合HTML的title属性。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title><%= htmlWebpackPlugin.options.title %></title>   <!--ejs语法 --> 
  </head>
  <body>
  </body>
</html>
  • 每次修改配置文件都需要重新run一下配置服务。

多模块配置项(多入口多出口配置)
webpack.config.js

const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");// 引入清空文件插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports={
	entry:{
	index:"./src/index.js",
	other:"./src/other.js",
	common:"./src/common.js",
	},
	output:{
		path:path.resolve(__dirname,"dist"),
		filename:"[name].[hash:5].js",//不限制个数默认是20位
	},
	plugins:[
	new CleanWebpackPlugin(),//每次清空dist中的老文件
	// ...html(),
	new HtmlWebpackPlugin({
		filename:"assets/index.html", 
		template:"public/index.html ", 
		chunks:["index","common"],		
	}),
	new HtmlWebpackPlugin({
		filename:"assets/other.html", 
		template:"public/other.html ", 
		chunks:["other","common"],
	}),
	]
}
/*把HTML编译提出来 
function html(){
	var ary = ["index","other"];
	var arr = [];
	ary.forEach(item+>{
		arr.push(
			new HtmlWebpackPlugin({
				filename:`assets/${item}.html`, 
				template:`public/${item}.html`, 
				chunks:[item,"common"],
			})
		)
	return arr;
})
}
*/

webpack 服务

webpack-dev-server 将webpack与提供实时重载的开发服务器一起使用。这应该仅用于开发。

安装 npm install webpack-dev-server --save-dev
虽然可以全局安装和运行webpack-dev-server,但建议在本地安装。webpack-dev-server将始终在全局安装中使用本地安装。

1.使用CLI

使用它的最简单方法是使用CLI。在您所在的目录中 webpack.config.js,运行:
node_modules / .bin / webpack-dev-server
在终端运行以下命令 npm run webpack-dev-server

2.使用NPM脚本

NPM package.json

"scripts": {
  "start:dev": "webpack-dev-server"
}

在终端运行以下命令:npm run start:dev ;
NPM将自动为您引用node_modules二进制文件,并执行文件或命令。
此处安装使用时出了几次问题,最后采用了webpack,webpack-cli降级处理正常了

配置 webpack.config.js

两种方式都可以配置 webpack.config.js

var path = require('path');
module.exports = {
  //...
  output: {
    filename: 'bundle.js',//output.filename设置为'bundle.js'
  },
  devServer: {
   headers: {'X-Custom-Foo': 'bar'},//将标头添加到所有响应:
    contentBase: path.join(__dirname, 'dist'), //静态资源路径
    compress: true,//是否压缩
    port: 9000, //端口号
    open:true,//服务启动之后自动打开页面
    lazy: true,//惰性模式
    filename: 'bundle.js',//仅在需要时编译捆绑软件/bundle.js。 
    //filename在不使用惰性模式的情况下不起作用。
    host: '0.0.0.0',//指定要使用的主机,使服务器可从外部访问
    hot: true, //启用webpack的热模块更换功能
  }
};

启动服务器后,已解析模块列表之前将出现一条消息:

http://localhost:9000/
webpack output is served from /build/
Content not from webpack is served from /path/to/dist/

webpack常见报错处理方式:

  • 语法问题
  • 版本问题(版本不支持)
  • 丢包,cnpm和yarn混用经常会导致丢包问题,重新安装,不要混用包管理器
  • 提示没有权限时,删除编译好的dist文件重新编译。在这里插入图片描述

CSS配置

从 JavaScript 模块中 import 一个CSS文件,需要,让js识别它,添加到页面中,或者单独提出来称为一个css文件,引入到页面中。

编译css

css-loader :把css编译成js可识别的语法
style-loader:把处理成JS的css,通过style标签插入到页面,真实项目一般不会使用style插入css

安装:npm install --save-dev css-loader style-loader
webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

提取CSS

mini-css-extract-plugin:将CSS提取到单独的文件中。它为每个包含CSS的JS文件创建一个CSS文件。
建议mini-css-extract-plugin与css-loader结合使用

与extract-text-webpack-plugin相比:

  • 异步加载
  • 没有重复的编译(性能)
  • 更容易使用
  • 特定于CSS

安装:npm install --save-dev mini-css-extract-plugin

style.css

body {
  background: green;
}

index.js

import './style.css';

webpack.config.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 
module.exports = {
  plugins: [new MiniCssExtractPlugin({
	filename:"css/[name].css",//此选项确定每个输出CSS文件的名称
	})],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
    ],
  },
};

处理css前缀

postcss-loader: 处理css前缀,需要安装postcss-loader和postcss

安装:npm install --save-dev postcss-loader postcss

file.js

import css from "file.css";

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [
          "style-loader",
          "css-loader",
         "postcss-loader",//适配css方法一:结合postcss.config.js使用
         /*
         //适配css方法二:
		{
           loader: "postcss-loader",
           options: {
             postcssOptions: {
               plugins: [
                 ["autoprefixer"],
               ],
             },
           },
         },
		*/
        ],
      },
    ],
  },
};

PostCSS预设环境:

需要安装postcss-preset-env:npm install --save-dev postcss-preset-env
postcss-preset-env包括autoprefixer

postcss.config.js(postcss的适配文件)

module.exports = {
  plugins: [
    ["postcss-preset-env"],
  ],
};

.browserslistrc(告诉webpack,适配99%的浏览器)

cover 99.9%

postcss 的配置步骤

可以处理css的兼容写法,转义rem,处理less,sass文件

  1. 安装postcss 和 postcss-loader
  2. 在处理对应的css文件之前 先加上 postcss-loader
  3. 配置postcss所需要的配置项 postcss.config.js (需要安装postcss-preset-env)
  4. 设置浏览器的兼容版本 .browserslistrc 文件

编译less文件

用于webpack的Less loader。将less 编译为CSS。
需要安装less和less-loader

安装:npm install less less-loader --save-dev

webpack.config.js

let MiniCss = require('mini-css-extract-plugin')
module.exports = {
plugins: [
    new CleanWebpackPlugin(),
    new MiniCss({
      filename: 'css/[name].css'
    })
  ],
  module: {
    rules: [
      {
        test: /\.less$/,
        loader: [  MiniCss.loader,'css-loader','less-loader', 'postcss-loader'] 
      },
    ],
  },
};
/*
MiniCss.loader,	4.把css提取出来插入的到页面中
'css-loader',	3.吧css-loader编译成JS可识别的语法
'less-loader', 	2.编译less成css
'postcss-loader'1 添加前缀
*/

压缩css

方法一:optimize-css-assets-webpack-plugin

optimize-css-assets-webpack-plugin :优化\最小化CSS。

安装:npm install --save-dev optimize-css-assets-webpack-plugin

webpack.config.js

var OptimizeCss = require('optimize-css-assets-webpack-plugin');
module.export = {
optimization:{
minimizer: [
	new OptimizeCss (),//当压缩css之后,JS就不会自动压缩了
]
}
}

方法二:css-minimizer-webpack-plugin

优化和缩小CSS。就像optimize-css-assets-webpack-plugin一样,但是使用查询字符串对源映射和资产更准确时,它可以缓存并在并行模式下工作。

安装 npm install css-minimizer-webpack-plugin --save-dev

webpack.config.css

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  module: {
	  plugins: [
	    new MiniCss({
	      filename: 'css/[name].css'
	    })
	  ],
    loaders: [
      {
        test: /.s?css$/,
        use: [MiniCss.loader, 'css-loader', 'sass-loader'],
      },
    ],
  },
  optimization: {
    minimize: true,
    minimizer: [
    	new CssMinimizerPlugin(),//当压缩css之后,JS就不会自动压缩了
    ],
  },
};

配置JS

处理JS

webpack 处理 JS 需要借助 babel :使用Babel和webpack转换JavaScript文件。
需要安装的插件:babel-loader @babel/core @babel/preset-env
babel的预设 presets 就是插件的集合
babel的插件 plugins 你要使用的预设中没有包含的插件

安装:npm install -D babel-loader @babel/core @babel/preset-env webpack

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: [['@babel/preset-env']   ],          
          plugins:  [ //两个插件顺序不能错
          	["@babel/plugin-proposal-decorators", { "legacy": true }],
          	//编译ES高级语法 需要安装:类的装饰器
          	//安装:npm install --save-dev @babel/plugin-proposal-decorators
    		["@babel/plugin-proposal-class-properties", { "loose" : true }],
    		//编译ES高级语法 需要安装:箭头函数,类等语法
          	//npm install --save-dev @babel/plugin-proposal-class-properties
    	],
        }
      }
    }
  ]
}

压缩JS

使用terser来缩小JavaScript。如果可能会因为版本问题报错建,可以降到@4.0.0

安装 npm install terser-webpack-plugin --save-dev

webpack.config.js

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  optimization: {
    minimize: true,
    minimizer: [
	    new CssMinimizerPlugin(),//当压缩css之后,JS就不会自动压缩了
	    new TerserPlugin()    
    ],
  },
};

安装 npm install terser-webpack-plugin --save-dev

加载图片

url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。url-loader内置调用file-loader
file-loader: 将文件上的/file-loader解析为url,然后将文件发送到输出目录。import require()

安装 cnpm install -D file-loader url-loader

index.js

import img from '../public/1.jpg';

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif|ico)$/i,
        use: [         
          {
            loader: 'url-loader',
            options: {
	            name: '[path][name].[ext]',
	            limit: 10*1024, //Byte limit to inline files as Data URL
            },
          },
        ],
      },
    ],
  },
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值