一:npx webpack 默认找配置文件

1、entry: “” ; // 表示入口文件

  1. module.exports = {
  2. //entry: './index.js',
  3. //entry: ['./index.js', 'index2.js'] // 配置多个打包入口文件
  4. entry: {
  5. main: 'index.js', // 打包后的文件名为 dist/main.js
  6. test: 'index.js', // 打包后的文件名为 dist/test.js
  7. },
  8. output: {
  9. // 不配置filename; 如果配置;
  10. filename: '[name].js]' // [name] 占位符
  11. path: path.resolve(__dirname, 'dist')
  12. }
  13. }

2、output: 输出的打包后的文件路径

  1. const path = require('path')
  2. module.exports = {
  3. entry: './index.js', // 打包的文件路径
  4. output: {
  5. filename: 'bundle.js' // 输出的文件名,
  6. path: path.resolve(__dirname, 'boudle') // 输出的文件夹名
  7. }
  8. }

3、module配置:

A:loader: 打包除了js外的配置;

1、打包jpg、png、gif等格式的图片

url-loader: 会将图片转为base64的字符串;
优点:可以减少http请求;缺点:但图片过大(Base64)占内存体积过大
file-loader:会将图片打包到一个文件下;
优点:不占体积;缺点:会多发http请求,每一个图片都会进行http请求;

  1. const path = require('path')
  2. module.exports = {
  3. // mode: 'development',
  4. entry: './src/index.js',
  5. output: {
  6. filename: 'boundle.js',
  7. path: path.resolve(__dirname, 'dist'),
  8. },
  9. module: {
  10. rules: [
  11. { // 第一条匹配规则
  12. test: /\.(png|jpg|gif)$/,
  13. use: [
  14. {
  15. // 将图片打包到目录下
  16. loader: 'file-loader', // 打包图片时使用的loader
  17. options: {
  18. name: '[name].[ext]', // 表示使用原始的图片名
  19. outputPath: 'imgs/', // 表示打包到哪个文件夹
  20. },
  21. },
  22. ],
  23. },
  24. ],
  25. },
  26. };
  1. module.exports = {
  2. // mode: 'development', 表示打包的模式,默认production模式
  3. entry: './src/index.js',
  4. output: {
  5. filename: 'boundle.js',
  6. path: path.resolve(__dirname, 'dist'),
  7. },
  8. module: {
  9. rules: [
  10. {
  11. test: /\.(png|jpg|gif)$/,
  12. use: [
  13. {
  14. // loader: 'file-loader',
  15. loader: 'url-loader', // 以base64的格式进行打包
  16. options: {
  17. name: '[name].[ext]', // 表示使用原始的图片名
  18. outputPath: 'imgs/', // 表示打包到哪个文件夹
  19. },
  20. },
  21. ],
  22. },
  23. ],
  24. },
  25. };

image.png

2、打包css类型的文件

loader执行顺序:从后往前;从前往后

  1. module: {
  2. rules: [{
  3. test: /\.scss$/,
  4. use: [
  5. "style-loader", // 将 JS 字符串生成为 style 节点
  6. "css-loader", // 将 CSS 转化成 CommonJS 模块
  7. "sass-loader" // 将 Sass 编译成 CSS,默认使用 Node Sass
  8. ]
  9. }]
  10. }

importLoaders: 2 ;表示如果在scss文件中引入别的scss表示也会使用postcss-loader和sass-loader
image.png

3、打包字体图标文件

file-loader: 打包到目标文件夹下
image.png
image.png

B:plugins插件的配置:

1、html-webpack-plugins: 打包后原来的html文件类型不变

2、clean-webpack-plugins: 打包时清除原先打包的dist目录

  1. const HtmlWebpackPulugins = require('html-webpack-plugins');
  2. const {CleanWebpackPlugins} = require('clean-webpack-plugins);
  3. module.exports = {
  4. mode: 'development',
  5. // entry: 'index.js',
  6. // entry: ['index.js', 'index2.js'],
  7. entry: { // 完整写法
  8. },
  9. output: {
  10. // filename: 'boudle.js', 如果不设置filename值 那么则拿entry对象中的key值作为文件名
  11. path: path.resolve(__dirname, 'dist');
  12. },
  13. plugins: [
  14. new HtmlWebpackPlugins ({
  15. template: './src/index.html' // 表示打包后的原来的html的模板
  16. }) ,
  17. new CleanWebpackPlugins(), // 表示清除原先的dist目录
  18. ]
  19. }

image.png

C:打包文件名配置:

image.png
配置多个entry的key
image.pngimage.png
如果配置了fileName;

  1. module.exports = {
  2. entry: {
  3. main: 'index.js',
  4. test: 'index2.js',
  5. },
  6. output: {
  7. publicPath: 'http://cdn.com.cn', // 可以在各自打包引入的js文件上路径加前加上这个公共路径
  8. // filename: 'boundle.js', // 会和entry配置的文件名产生冲突
  9. filename: '[name].js', // 可以通过占位符打包各自key文件的js
  10. path: .....
  11. }
  12. }

image.png
配置publicPath: 可以在各自打包引入的js文件上路径加前加上这个公共路径;
image.png
image.png

D:找到报错的位置:devtool: sourcemap 调试工具打包 错误代码提示

image.png
image.png
source-map: 会生成.map这样的文件;
inline-source-map: 会精确到某一行某一列;inline-cheap-source-map: 精确到某一行
inline-cheap-module-source-map: 也会去管理第三方模块报错的问题;哪一行;
eval : 打包速度块, 但是出现错误提示的会不完整;
image.png
image.png
.map文件是一个映射文件

最佳方案推荐;

  1. module.exports = {
  2. mode: 'development', // 开发环境下
  3. devtool: 'cheap-module-eval-source-map'// 提示清楚,打包速度也不是很慢;不会产生.map文件
  4. }
  1. module.exports = {
  2. mode: 'production',
  3. devtool: 'cheap-module-source-map' // cheap 告诉哪一行出错
  4. } // module 告诉第三方模块哪个出错
  5. // 会产生.map映射文件

E:开发中devServer;

1、说明: “dev”: ‘webpack-dev-serve’; 只要源代码发生变化就会看到最新的源代码执行的结果;
“watch”: “webpack —watch”; 监听源代码只要源代码发生变化就自动打包

  1. // 本地请求: http://localhost:8080/api/yixiantong/getDatas
  2. module.exports = {
  3. mode: 'development',
  4. devServer: {
  5. contentBase: './dist', // 表示运行在服务器上的文件,
  6. open: true, // 自动打开
  7. proxy: { // 配置代理本地服务器, 由服务器服务器之间发起请求解决跨域问题
  8. '/api': {
  9. // 目标服务器, 发起的请求:http://study.com.cn/api/yixiantong/getDatas
  10. target: 'http://study.com.cn',
  11. changeOrigin: true,
  12. pathRewrite: { // 路径的重写
  13. '/api': '', // http://study.com.cn/yixiantong/getDatas
  14. }
  15. }
  16. }
  17. }
  18. }
  19. axios.get('/api/yixiantong')
  1. // 本地请求: http://localhost:8080/abc/bcd/api/yixiantong/getDatas
  2. module.exports = {
  3. mode: 'development',
  4. devServer: {
  5. contentBase: './dist', // 表示运行在服务器上的文件,
  6. open: true, // 自动打开
  7. proxy: { // 配置代理本地服务器, 由服务器服务器之间发起请求解决跨域问题
  8. '/api': {
  9. target: 'http://study.com.cn',
  10. changeOrigin: true,
  11. pathRewrite: { // 路径的重写
  12. // api参数接口之前的路径都替换为空
  13. '^/api': '' // http://study.com.cn/yixiantong/getDatas
  14. }
  15. }
  16. }
  17. }
  18. }
  19. axios.get('/api/yixiantong')
  1. // 本地请求: https://localhost:8080/abc/bcd/api/yixiantong/getDatas
  2. module.exports = {
  3. mode: 'development',
  4. devServer: {
  5. contentBase: './dist', // 表示运行在服务器上的文件,
  6. open: true, // 自动打开
  7. proxy: { // 配置代理本地服务器, 由服务器服务器之间发起请求解决跨域问题
  8. '/api': {
  9. target: 'http://study.com.cn',
  10. secure: false, // 如果请i去协议为https加上
  11. changeOrigin: true,
  12. pathRewrite: { // 路径的重写
  13. // api参数接口之前的路径都替换为空
  14. '^/api': '' // https://study.com.cn/yixiantong/getDatas
  15. }
  16. }
  17. }
  18. }
  19. }
  20. axios.get('/api/yixiantong')

二:更改默认配置文件名

1、npx webpack —config ‘path’ ; path: 默认更改后的文件路径