美文网首页
vue + vant 移动端

vue + vant 移动端

作者: 弓长晓 | 来源:发表于2020-09-29 17:35 被阅读0次

    rem+less 配置自动rem换算

    vant 安装

    # 通过 npm 安装
    npm i vant -S
    

    postcss 配置,

    module.exports = {
      plugins: {
        autoprefixer: {
          browsers: ['Android >= 4.0', 'iOS >= 8'],
        },
        'postcss-pxtorem': {
          rootValue: 37.5, // vant的根比例
          propList: ['*'],
        },
      },
    };
    

    01--vant组件的引入方式
    main.js 全局导入所有组件

    import 'vant/lib/index.css'
    
    Vue.use(Vant)
    

    按需使用vant组件

    import {Row, Col} from 'vant' 
    Vue.use(Row).use.(Col)
    

    安装babel-plugin-import,它可以让我们按需引入组件模块
    .babelrc中配置plugins

    "plugins": [
        "transform-vue-jsx", 
        "transform-runtime",
        ["import",{"libraryName":"vant","style":true}]
      ]
    

    01--vant 主题配置
    官网的给的案例

    // vue.config.js
    module.exports = {
      css: {
        loaderOptions: {
          less: {
            // 若使用 less-loader@5,请移除 lessOptions 这一级,直接配置选项。
            lessOptions: {
              modifyVars: {
                // 直接覆盖变量
                'text-color': '#111',
                'border-color': '#eee',
                // 或者可以通过 less 文件覆盖(文件路径为绝对路径)
                hack: `true; @import "your-less-file-path.less";`,
              },
            },
          },
        },
      },
    };
    

    安照配置,照猫画虎 vue.config.js

    // const myTheme = path.resolve(__dirname, 'src/styles/style.less') // less 覆盖
      css: {
        extract: IS_PROD,
        requireModuleExtension: true, // 去掉文件名中的 .module
        loaderOptions: {
          // 给 less-loader 传递 Less.js 相关选项
          less: {
            // `globalVars` 定义全局对象,可加入全局变量
            modifyVars: {
              // hack: `true; @import "${myTheme}";`
              // hack: `true; @import "your-less-file-path.less";`,
              hack: `true; @import "${resolve('src/styles/style.less')}";`
            }
          }
        }
      },
    

    有小伙伴没有配置vue.config.js添加内容 ,以下是没有这个vue.config.js文件新建文件方式

    // const path = require("path");
    // const myTheme = path.resolve(__dirname, "src/assets/style/myTheme.less");
    // module.exports = {
    //     css: {
    //         loaderOptions: {
    //             less: {
    //                 // 若使用 less-loader@5,请移除 lessOptions 这一级,直接配置选项。
    //                 lessOptions: {
    //                     modifyVars: {
    //                         // 直接覆盖变量
    //                         'text-color': '#111',
    //                         'border-color': '#eee',
    //                         // 或者可以通过 less 文件覆盖(文件路径为绝对路径)
    //                         hack: `true; @import "your-less-file-path.less";`,
    //                     },
    //                 },
    //             },
    //         },
    //     },
    //     pluginOptions: {
    //         'style-resources-loader': {
    //             preProcessor: 'less',
    //             patterns: [
    //                 path.resolve(__dirname, './src/styles/style.less'),
    //             ],
    //         },
    //     },
    // };
    

    更新需要vue.config.js文件

    // vue.config.js
    const path = require('path')
    
    const CompressionWebpackPlugin = require('compression-webpack-plugin') // 开启gzip压缩, 按需引用
    const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i // 开启gzip压缩, 按需写入
    const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin // 打包分析
    // const myTheme = path.resolve(__dirname, 'src/styles/style.less') // less 覆盖
    
    const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
    const resolve = (dir) => path.join(__dirname, dir)
    module.exports = {
      publicPath: process.env.NODE_ENV === 'production' ? '/site/vue-demo/' : '/', // 公共路径
      indexPath: 'index.html', // 相对于打包路径index.html的路径
      outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
      assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
      lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
      runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
      productionSourceMap: !IS_PROD, // 生产环境的 source map
      parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
      pwa: {}, // 向 PWA 插件传递选项。
      chainWebpack: config => {
        config.resolve.symlinks(true) // 修复热更新失效
        // 如果使用多页面打包,使用vue inspect --plugins查看html是否在结果数组中
        config.plugin('html').tap(args => {
          // 修复 Lazy loading routes Error
          args[0].chunksSortMode = 'none'
          return args
        })
        config.resolve.alias // 添加别名
          .set('@', resolve('src'))
          .set('@assets', resolve('src/assets'))
          .set('@components', resolve('src/components'))
          .set('@views', resolve('src/views'))
          .set('@store', resolve('src/store'))
        // 压缩图片
        // 需要 npm i -D image-webpack-loader
        config.module
          .rule('images')
          .use('image-webpack-loader')
          .loader('image-webpack-loader')
          .options({
            mozjpeg: { progressive: true, quality: 65 },
            optipng: { enabled: false },
            pngquant: { quality: [0.65, 0.9], speed: 4 },
            gifsicle: { interlaced: false },
            webp: { quality: 75 }
          })
        // 打包分析
        // 打包之后自动生成一个名叫report.html文件(可忽视)
        if (IS_PROD) {
          config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
            {
              analyzerMode: 'static'
            }
          ])
        }
      },
      configureWebpack: config => {
        // 开启 gzip 压缩
        // 需要 npm i -D compression-webpack-plugin
        const plugins = []
        if (IS_PROD) {
          plugins.push(
            new CompressionWebpackPlugin({
              filename: '[path].gz[query]',
              algorithm: 'gzip',
              test: productionGzipExtensions,
              threshold: 10240,
              minRatio: 0.8
            })
          )
        }
        config.plugins = [...config.plugins, ...plugins]
      },
      css: {
        extract: IS_PROD,
        requireModuleExtension: true, // 去掉文件名中的 .module
        loaderOptions: {
          // 给 less-loader 传递 Less.js 相关选项
          less: {
            // `globalVars` 定义全局对象,可加入全局变量
            modifyVars: {
              // hack: `true; @import "${myTheme}";`
              // hack: `true; @import "your-less-file-path.less";`,
              hack: `true; @import "${resolve('src/styles/style.less')}";`
            }
          }
        }
      },
      pluginOptions: {
        'style-resources-loader': {
          preProcessor: 'less',
          patterns: [
            path.resolve(__dirname, './src/styles/MyStyle.less')
            // 'D:\\code\\我的仓库\\blog\\src\\styles\\MyStyle.less'
          ]
        }
      },
      devServer: {
        overlay: { // 让浏览器 overlay 同时显示警告和错误
          warnings: true,
          errors: true
        },
        host: 'localhost',
        port: 8080, // 端口号
        https: false, // https:{type:Boolean}
        open: false, // 配置自动启动浏览器
        hotOnly: true, // 热更新
        // proxy: 'http://localhost:8080'   // 配置跨域处理,只有一个代理
        proxy: { // 配置多个跨域
          '/api': {
            target: 'http://172.11.11.11:7071',
            changeOrigin: true,
            // ws: true,//websocket支持
            secure: false,
            pathRewrite: {
              '^/api': '/'
            }
          },
          '/api2': {
            target: 'http://172.12.12.12:2018',
            changeOrigin: true,
            // ws: true,//websocket支持
            secure: false,
            pathRewrite: {
              '^/api2': '/'
            }
          }
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:vue + vant 移动端

          本文链接:https://www.haomeiwen.com/subject/amqeuktx.html