vue2 

安装 插件  npm i style-vw-loader --save

vue.config.js 文件配置


module.exports = {
  chainWebpack: (config) => {
    config.module
      .rule('vue')
      .test(/\.vue$/)
      .use('style-vw-loader')
      .loader('style-vw-loader')
      .options({
        unitToConvert: "px",//需要转换的单位
        viewportWidth: 1920,//设计稿的宽度
        unitPrecision: 5,//转换单位的小数位数
        viewportUnit: "vw",
        fontViewportUnit: "vw",
        minPixelValue: 1,
      })
  }
}

在vite 中使用 

创建 stylePxToVw.ts 文件

// 默认参数
let defaultsProp = {
   unitToConvert: "px",//需要转换的单位
   viewportWidth: 1920,//设计稿的宽度
   unitPrecision: 5,//转换单位的小数位数
    viewportUnit: "vw",
    fontViewportUnit: "vw",
    minPixelValue: 1,
};
function toFixed(number:any, precision:any) {
    var multiplier = Math.pow(10, precision + 1),
        wholeNumber = Math.floor(number * multiplier);
    return (Math.round(wholeNumber / 10) * 10) / multiplier;
}

function createPxReplace(
    viewportSize:any,
    minPixelValue:any,
    unitPrecision:any,
    viewportUnit:any
) {
    return function ($0:any, $1:any) {
        if (!$1) return;
        var pixels = parseFloat($1);
        if (pixels <= minPixelValue) return;
        return toFixed((pixels / viewportSize) * 100, unitPrecision) + viewportUnit;
    };
}
const templateReg = /<template>([\s\S]+)<\/template>/gi;
const pxGlobalReg = /(\d+)px/gi;

// 生成插件的工厂方法
const pluginGenerator = (customOptions = defaultsProp) => {
    // 返回插件
    return {
        // 插件名称
        name: "postcss-px-to-viewport",

        // transform 钩子
        async transform(code:any, id:any) {
            let _source = "";
            if (/.vue$/.test(id)) {
                let _source = "";
                if (templateReg.test(code)) {
                    _source = code.match(templateReg)[0];
                }
                if (pxGlobalReg.test(_source)) {
                    let $_source = _source.replace(
                        pxGlobalReg,
                        createPxReplace(
                            customOptions.viewportWidth,
                            customOptions.minPixelValue,
                            customOptions.unitPrecision,
                            customOptions.viewportUnit
                        )
                    );

                    code = code.replace(_source, $_source);
                    console.log(code);
                }
            }
            return { code };
        },
    };
};

export default pluginGenerator;

stylePxToVw.ts文件在文件夹中的位置

报错就加入

在tsconfig.json文件中 加入

 

{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": [
      "ESNext",
      "DOM"
    ],
    "skipLibCheck": true,
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "./src/*"
      ]
    }
  },
  "include": [
    "src/utils/*.ts",
    "src/**/*",
    "src/**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "vite.config.ts"
  ],
}

在vite.config.ts中使用

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐