zoukankan      html  css  js  c++  java
  • vue-config.js配置(多页面应用以及打包后图片文件的引用路径改为cdn路径)

    vue-config.js配置,我们前面搭建好脚手架会发现,这个对比2.x版本少了很多东西,没有build的配置,也没有webpack的配置,那么问题来了,我们如何去开发我们的项目呢,比如设置代理,打包配置等问题呢?

    vue cli3.0项目中需要配置其他参数时,需要新建文件'vue.config.js',(这文件名是固定这么写的),与package.json在同一级目录下。

    module.exports = {
        // 项目部署的基础路径
        // 我们默认假设你的应用将会部署在域名的根部,
        // 比如 https://www.my-app.com/
        // 如果你的应用时部署在一个子路径下,那么你需要在这里
        // 指定子路径。比如,如果你的应用部署在
        // https://www.foobar.com/my-app/
        // 那么将这个值改为 `/my-app/`
        publicPath: process.env.NODE_ENV === "production" ? "./" : "/",  /*这个是我存放在github在线预览的Reader项目*/
      
        // chainWebpack: config => {
        //     config
        //     .module
        //     .rule("images")
        //     .test(/.(jpg|png|gif)$/)
        //     .use("url-loader")
        //     .loader("url-loader")
        //     .options({
        //         limit:10,
        //         publicPath: 'https://oss.xx.com/img' ,
        //         outputPath: 'img',
        //         name: '[name].[ext]',
        //     })
        //     .end();
        // },
        // 将构建好的文件输出到哪里(或者说将编译的文件)
        outputDir: 'dist',
      
        // 放置静态资源的地方 (js/css/img/font/...)
        assetsDir: '',
      
        // 用于多页配置,默认是 undefined
        pages: {
          index: {
            // 入口文件
            entry: 'src/main.js',  /*这个是根入口文件*/
            // 模板文件
            template: 'public/index.html',
            // 输出文件
            filename: 'index.html',
            // 页面title
            title: 'Index Page'
          },
          sec: {
            entry: 'src/main.js',
            template: 'public/index.html',
            filename: 'sec.html',
            title: 'sec Page'
          },
          // 简写格式
          // 模板文件默认是 `public/subpage.html`
          // 如果不存在,就是 `public/index.html`.
          // 输出文件默认是 `subpage.html`.
          subpage: 'src/main.js'    /*注意这个是*/
        },
      
        // 是否在保存的时候使用 `eslint-loader` 进行检查。
        // 有效的值:`ture` | `false` | `"error"`
        // 当设置为 `"error"` 时,检查出的错误会触发编译失败。
        lintOnSave: true,
      
        // 使用带有浏览器内编译器的完整构建版本
        // 查阅 https://cn.vuejs.org/v2/guide/installation.html#运行时-编译器-vs-只包含运行时
        runtimeCompiler: false,
      
        // babel-loader 默认会跳过 node_modules 依赖。
        // 通过这个选项可以显式转译一个依赖。
        transpileDependencies: [/* string or regex */],
      
        // 是否为生产环境构建生成 source map?
        productionSourceMap: true,
      
        // 调整内部的 webpack 配置。
        // 查阅 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/webpack.md
        chainWebpack: (config) => {
            config
            .module
            .rule("images")
            .test(/.(jpg|png|gif)$/)
            .use("url-loader")
            .loader("url-loader")
            .options({
                limit:10,
                publicPath: 'https://oss.xx.com/img' ,
                outputPath: 'img',
                name: '[name].[ext]',
            })
            .end();
        },
        configureWebpack: () => {},
      
        // CSS 相关选项
        css: {
          // 将组件内的 CSS 提取到一个单独的 CSS 文件 (只用在生产环境中)
          // 也可以是一个传递给 `extract-text-webpack-plugin` 的选项对象
          extract: true,
      
          // 是否开启 CSS source map?
          sourceMap: false,
      
          // 为预处理器的 loader 传递自定义选项。比如传递给
          // sass-loader 时,使用 `{ sass: { ... } }`。
          loaderOptions: {},
      
          // 为所有的 CSS 及其预处理文件开启 CSS Modules。
          // 这个选项不会影响 `*.vue` 文件。
          modules: false
        },
      
        // 在生产环境下为 Babel 和 TypeScript 使用 `thread-loader`
        // 在多核机器下会默认开启。
        parallel: require('os').cpus().length > 1,
      
        // PWA 插件的选项。
        // 查阅 https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/cli-plugin-pwa
        pwa: {},
      
        // 配置 webpack-dev-server 行为。
        devServer: {
          open: process.platform === 'darwin',
          host: '0.0.0.0',
          port: 8080,
          https: false,
          hotOnly: false,
          // 查阅 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/cli-service.md#配置代理
          proxy: {
                '/api': {
                      target: 'http://localhost:8880',
                      changeOrigin: true,
                      secure: false,
                      // ws: true,
                      pathRewrite: {
                          '^/api': '/static/mock'   // 请求数据路径别名,这里是注意将static/mock放入public文件夹
                      }
                }
         },
         before: app => {}
        },
      
        // 三方插件的选项
        pluginOptions: {
          // ...
        }
      }

    多页面配置:

        // 用于多页配置,默认是 undefined
        pages: {
          index: {
            // 入口文件
            entry: 'src/main.js',  /*这个是根入口文件*/
            // 模板文件
            template: 'public/index.html',
            // 输出文件
            filename: 'index.html',
            // 页面title
            title: 'Index Page'
          },
          sec: {
            entry: 'src/main.js',
            template: 'public/index.html',
            filename: 'sec.html',
            title: 'sec Page'
          },
          // 简写格式
          // 模板文件默认是 `public/subpage.html`
          // 如果不存在,就是 `public/index.html`.
          // 输出文件默认是 `subpage.html`.
          subpage: 'src/main.js'    /*注意这个是*/
        },
    View Code

    打包后图片文件的引用路径改为cdn路径

        chainWebpack: (config) => {
            config
            .module
            .rule("images")
            .test(/.(jpg|png|gif)$/)
            .use("url-loader")
            .loader("url-loader")
            .options({
                limit:10,
                publicPath: 'https://oss.xx.com/img' ,
                outputPath: 'img',
                name: '[name].[ext]',
            })
            .end();
        },
    View Code

    但是这样配置的话, 不管开发还是生产环境下都会将引用路径修改为cdn路径, 而我们的需求是只在生产环境下使用cdn, 开发环境下使用相对路径,

    因此使用process.env.NODE_ENV判断项目环境

    这里我们把相关选项写在了url-loader里, url-loader本身的作用是将图片引用方式转换为base64的内联引用方式,

    通过配置limit, 可使文件大小小于此limit值(单位为byte)的文件转换为base64格式, 大于此limit的, 会执行options中的fallback配置项插件,

    fallback默认值为file-loader, 而且url-loader的options配置项也会被传递给file-loader.(查看文档)

    最终代码:

    chainWebpack: config => {
        config
          .module
          .rule("images")
          .test(/.(jpg|png|gif)$/)
          .use("url-loader")
          .loader("url-loader")
          .options({
            limit:10,
            // 以下配置项用于配置file-loader
            // 根据环境使用cdn或相对路径
            publicPath: process.env.NODE_ENV === 'production' ? 'https://oss.xx.com/img' : './',
            // 将图片打包到dist/img文件夹下, 不配置则打包到dist文件夹下
            outputPath: 'img',
            // 配置打包后图片文件名
            name: '[name].[ext]',
          })
          .end();
    }
  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/lst619247/p/13554934.html
Copyright © 2011-2022 走看看