Sky_Tsumugi 2022-12-07 10:18 采纳率: 73.3%
浏览 37
已结题

webpack,css,js,静态资源打包到不同的二级目录中

问题遇到的现象和发生背景

目前打包出的资源,全部在 dist 目录下,也就是这样

img

用代码块功能插入代码,请勿粘贴截图

这是现在相关的配置代码

// 入口
  entry: "./src/index.js",

  // 出口
  output: {
    //输出文件名称
    filename: "[name].[contenthash].js",
    // 输出文件路径
    path: path.resolve(__dirname, "dist"),
  },

 module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.(png|gif|jpg)$/i,
        type: "asset/resource",
      },
      {
        test: /\.js$/i,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env"],
          },
        },
      },
    ],
我想要达到的结果

希望打包后的dist文件夹目录结构清晰,将css,js,静态资源放在dist下不通的二级目录

-dist
----css //存放打包后的css文件
----js //存放打包后的js文件
---asset // 存放静态资源
---font //存放字体资源
---index.html

请问该怎么配置?

  • 写回答

1条回答 默认 最新

  • 爱新觉罗·苟子 2022-12-09 14:06
    关注
    
    const CompressionPlugin = require('compression-webpack-plugin')
    config.plugin('compressionPlugin').use(new CompressionPlugin({
            test: /\.(js|css|less)$/, // 匹配文件名
            threshold: 10240, // 对超过10k的数据压缩
            deleteOriginalAssets: false // 不删除源文件
          }))
    

    一个完整配置

    
    ```javascript
    const path = require('path')
    const CompressionPlugin = require('compression-webpack-plugin')
    
    function resolve(dir) {
      return path.join(__dirname, dir)
    }
    
    // vue.config.js
    module.exports = {
      /*
        Vue-cli3:
        Crashed when using Webpack `import()` #2463
        https://github.com/vuejs/vue-cli/issues/2463
       */
      // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
      productionSourceMap: false,
      //打包app时放开该配置
      //publicPath:'./',
      assetsDir: 'staticDir',
    
      configureWebpack: config => {
    
        //生产环境取消 console.log
        if (process.env.NODE_ENV === 'production') {
          config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
        }
      },
      chainWebpack: (config) => {
    
        config.resolve.alias
          .set('@$', resolve('src'))
          .set('@api', resolve('src/api'))
          .set('@assets', resolve('src/assets'))
          .set('@comp', resolve('src/components'))
          .set('@views', resolve('src/views'))
    
        //生产环境,开启js\css压缩
        if (process.env.NODE_ENV === 'production') {
          config.plugin('compressionPlugin').use(new CompressionPlugin({
            test: /\.(js|css|less)$/, // 匹配文件名
            threshold: 10240, // 对超过10k的数据压缩
            deleteOriginalAssets: false // 不删除源文件
          }))
        }
    
        // 配置 webpack 识别 markdown 为普通的文件
        config.module
    
          .rule('markdown')
          .test(/\.md$/)
          .use()
          .loader('file-loader')
          .end()
    
        // 编译vxe-table包里的es6代码,解决IE11兼容问题
        config.module
          .rule('vxe')
          .test(/\.js$/)
          .include
          .add(resolve('node_modules/vxe-table'))
          .add(resolve('node_modules/vxe-table-plugin-antd'))
          .end()
          .use()
          .loader('babel-loader')
          .end()
    
      },
    
      css: {
        loaderOptions: {
          less: {
            modifyVars: {
              /* less 变量覆盖,用于自定义 ant design 主题 */
              'primary-color': '#1890FF',
              'link-color': '#1890FF',
              'border-radius-base': '4px'
            },
            javascriptEnabled: true
          }
          // scss: {
          //   prependData: `@import "@/assets/scss/_variable.scss";`
          // }
        }
      },
    
      devServer: {
        port: 3000,
        proxy: {
          /* '/api': {
             target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
             ws: false,
             changeOrigin: true,
             pathRewrite: {
               '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
             }
           },*/
          '/jeecg-boot': {
            target: 'http://api.fuzhou.bwk.ddns.net:90/smart-city', //请求本地 需要jeecg-boot后台项目
            ws: false,
            changeOrigin: true,
            pathRewrite: {
              '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
            }
          }
        }
      },
    
      lintOnSave: undefined
    }
    
    
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 12月7日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?