webpack打包全流程

Posted 理想今年妳几岁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack打包全流程相关的知识,希望对你有一定的参考价值。

 一、 webpack 五个核心概念

1.1 Entry 入口(Entry)
指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。

1.2 Output 输出(Output)
指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。

1.3 Loader
Loader 让 webpack 能 够 去 处 理 那 些 非 javascript 文 件 (webpack 自 身 只 理 解 JavaScript)

1.4 Plugins
插件(Plugins)可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩, 一直到重新定义环境中的变量等。

1.5 Mode
模式(Mode)指示 webpack 使用相应模式的配置。

二、编译打包应用

初始化 package.json -- npm init

下载并安装 webpack --npm install webpack webpack-cli -g

开发环境指令:webpack src/js/index.js -o build/js/built.js --mode=development/production打包入口及输出位置 打包环境配置

三、配置webpack

const  resolve  = require('path'); // node 内置核心模块,用来处理路径问题。
module.exports =  
 mode: 'development' //开发环境   production  //生产环境
 	 entry: './src/js/index.js', //  单入口文件
      // entry:                      //多入口  会打包双方重复文件
      //   index: './src/index.js',
      //   another: './src/another-module.js'
      // ,
      // entry:                      //多入口   lodash不会重复打包
      //   index:  import: './src/index.js', dependOn: 'shared' ,
      //   another:  import: './src/another-module.js', dependOn: 'shared' ,
      //   shared: 'lodash'
      // ,
	 output:  // 输出配置
    	 filename: './built.js', // 输出文件名 
         path: resolve(__dirname, 'dist'),  //打包后的输出位置 webpack当前目录下的  dist
    //contenthash根据内容变化生成文件名 不变不修改名字会用缓存
        filename: 'scripts/[name].[contenthash].js', //'bundle.js',      //打包后的文件名  多个入口不能写固定一个名字
        clean: true,   //打包后清除上次内容
        assetModuleFilename: 'images/[contenthash][ext]', //静态文件打包地址/文件名
        publicPath: ''
	 ,
     devtool: 'inline-source-map',  //打包后找到真实源代码位置
    devServer:             //实时更新
        static: './dist', 
        hot: true,   //开启热更新
        compress: true, // 启动gzip压缩
        port: 3000, // 端口号
        open: true // 自动打开浏览器
        proxy:    //代理
          '/api': 
            target: 'http://localhost:4000',
            changeOrigin: true,
            ws: true,
            pathRewrite: 
              '^/api': ''
            
      
    
  ,
 module: 
    rules: [
      // 详细loader配置
      // 不同文件必须配置不同loader处理
     
        test: /\\.(jpg|gif|png)/,
        use: 'url-loader',
        option: // 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)
          esModule: true,
          limint: 5 * 1024,    //图片是否转base64
          name: '[hash: 10].[ext]'  //图片命名
        
      ,
      
        test: /\\.(css|less)$/,
        // use: ['style-loader', 'css-loader', 'less-loader']  //从后往前编译 先解析在编译  行内样式
        use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一个css 用link引入到html中
      ,
      
        test: /\\.js$/,
        exclude: /node_modules/,
        use: 
          loader: 'babel-loader',
          options: 
            presets: ['@babel/preset-env'],
            plugins: [
              [
                '@babel/plugin-transform-runtime'  //为promise解决
              ]
            ]
          
        
      ,

    ]
  ,
 plugins: [
webpack.HotModuleReplacementPlugin(), //热更新
    new HtmlWebpackPlugin(
      template: './index.html', //要打包的html
      filename: 'app.html',  //html打包后的名字
      inject: 'body',   //script 标签生成地址
      collapseWhitespace: true,  //压缩移除空格
      removeComments: true,  //压缩移除注释
    ),
    new MinCssExtractPlugin(   //把css文件打包到一个新css 用link引入到html中 可修改地址/文件名
      filename: 'styles/[contenthash].css'
    )
  ],
 optimization: 
    minimizer: [
      new CssMinimizerWebpackPlugin()  //还需将mode改为production  会压缩css代码
    ],
    splitChunks: 
      // chunks: 'all',// 公共文件 lodash不会重复打包
      cacheGroups: 
        vendor: 
          test: /[\\\\/]node_modules[\\\\/]/,
          name: 'vendors',
          chuns: 'all'
        
      
    
  
;

若依vue版多模块打包流程

参考技术A 只需要打包ruoyi-admin包即可。
ruoyi-admin下的pom文件需要配置build...configuration.mainClass节点配置class main入口文件的类

以上是关于webpack打包全流程的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 打包---流程和loader

Webpack 打包---流程和loader

Webpack 打包---流程和loader

Webpack 打包---流程和loader

webpack打包的CSS含有两个相同的引入?

若依vue版多模块打包流程