nuxt项目中使用postcss-px2rem踩坑记

本文介绍如何在Nuxt.js项目中使用postcss-px2rem插件实现px到rem单位的自动转换,包括安装步骤、配置方法及一份完整的nuxt.config.js配置示例。

最近准备使用nuxt开发一个移动端的项目,在做技术调研时发现一款可以自动适配px和rem的神器,名为postcss-px2rem。于是,怀着激动的心情我开始了px2rem 的采坑记。

第一步下载:

npm install postcss-px2rem –save

第二步引入项目:(经过测试这步可以 省去)

const px2rem = require(‘postcss-px2rem’)

第三步配置webpack

  build: {
    /*
    ** Run ESLint on save
    */
    extend (config, { isDev, isClient }) {
      if (isDev && isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
    },
    postcss: [
      require('postcss-px2rem')({
        remUnit: 75
      })
    ],
  }

下面是一份nuxt的配置文件,希望对大家有帮助

// nuxt.config.js 文件配置
const path = require('path')

module.exports = {
  // Headers of the page
  head: {
    title: '默认共用title',
    meta: [
      { charset: 'utf-8' },
      { 'http-equiv': 'pragma', content: 'no-cache' },
      { 'http-equiv': 'cache-control', content: 'no-cache' },
      { 'http-equiv': 'expires', content: '0' },
      { content: 'telephone=no', name: 'format-detection' }
    ],
    // html head 中创建 script 标签
    script: [
      { innerHTML: require('./assets/js/flexible_nuxt'), type: 'text/javascript', charset: 'utf-8'}
    ],
    // 不对<script>标签中内容做转义处理
    __dangerouslyDisableSanitizers: ['script']
  },
  // Global CSS
  css: ['~/assets/css/reset.css', '~/assets/css/main.less'],
  // Global env
  env: {
    __ENV: process.env.__ENV
  },
  build: {
    vendor: ['axios'],
    postcss: [
      require('postcss-px2rem')({
        remUnit: 75
      })
    ],
    extend (config, ctx) {
      if (ctx.isClient) {
        // 拓展 webpack 配置
        config.entry['polyfill'] = ['babel-polyfill']
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
        // 添加 alias 配置
        Object.assign(config.resolve.alias, {
          'utils': path.resolve(__dirname, 'utils')
        })
      }
    }
  },
  plugins: [{src: '~plugins/toast', ssr: false}, {src: '~plugins/dialog', ssr: false}]
}
### 解决 PostCSS-pxtoremNuxt 项目中不生效的问题 在 Nuxt 项目中,PostCSS 插件 `postcss-pxtorem` 可能会因为配置不当或加载顺序问题而不生效。以下是一些可能的解决方案和需要注意的关键点[^1]。 #### 配置检查 确保在项目的 `nuxt.config.js` 文件中正确配置了 PostCSS 插件。例如: ```javascript export default { build: { postcss: { plugins: { 'postcss-pxtorem': { rootValue: 16, // 根字体大小 propList: ['*'], // 需要换的属性列表 unitPrecision: 5, // 换后的精度 selectorBlackList: [], // 忽略的选择器 replace: true, mediaQuery: false, minPixelValue: 0 } } } } } ``` 上述配置将确保所有以 `px` 为单位的样式都会被换为 `rem` 单位[^2]。 #### 安装依赖 确认已经安装了 `postcss-pxtorem` 和相关依赖项。如果尚未安装,可以使用以下命令进行安装: ```bash npm install postcss-pxtorem --save-dev ``` #### 检查 lib-flexible 的引入 如果项目使用了 `lib-flexible` 来动态调整根字体大小,确保其在项目初始化时正确加载。通常需要在 `main.js` 或 `nuxt.config.js` 中引入: ```javascript import 'lib-flexible/flexible' ``` 这一步非常重要,因为 `postcss-pxtorem` 换后的 `rem` 值依赖于根字体大小的动态调整[^4]。 #### 调试与验证 如果仍然无效,可以通过以下方法进行调试: 1. 确认是否在生成的 CSS 文件中看到了 `rem` 单位。 2. 使用浏览器开发者工具检查最终渲染的样式是否正确应用了 `rem`。 3. 确保没有其他 PostCSS 插件覆盖了 `postcss-pxtorem` 的行为。 #### 其他注意事项 如果项目使用了 Vue 单文件组件(`.vue` 文件),确保它们能够正确加载并处理样式。例如,可以参考 `vuegister` 或 `vue-node` 工具来优化单文件组件的加载过程[^3]。 --- ###
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值