博主白天搬砖,晚上😄分享,2025新的开始,感谢相遇,一起做大做强。承接上一篇,Taro入门合集,新手小白也可以做项目(1)共86-CSDN博客,跟着我一起做下去,你也能做一款自己的小程序,今天会讲一些日常开发的注意或者说默认规则,包括全局配置,自适应单位命名等。
一、编译配置(打包配置)
编译配置存放于项目根目录下的 config
目录中,只要确保 config/index.js
或者 config/index.ts
文件存在,可以作为用户自定义编译配置导出即可。你也可以选择拆分成三个文件(具体见默认配置):
index.js
是通用配置dev.js
是项目预览时的配置prod.js
是项目打包时的配置
详细的编译配置文档请查阅:编译配置详情
从 Taro v3.6.5 开始,
config/index.ts
支持使用ts
文件(react native
暂不支持)
1.默认配置
config/index.js
const config = {
// 项目名称
projectName: 'Awesome Next',
// 项目创建日期
date: '2020-6-2',
// 设计稿尺寸
designWidth: 750,
// 设计稿尺寸换算规则
deviceRatio: {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2,
},
// 项目源码目录
sourceRoot: 'src',
// 项目产出目录
outputRoot: 'dist',
// Taro 插件配置
plugins: [],
// 全局变量设置
defineConstants: {},
// 文件 copy 配置
copy: {
patterns: [],
options: {},
},
// 框架,react,nerv,vue, vue3 等
framework: 'react',
// 小程序端专用配置
mini: {
postcss: {
autoprefixer: {
enable: true,
},
// 小程序端样式引用本地资源内联配置
url: {
enable: true,
config: {
limit: 10240,
},
},
cssModules: {
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
config: {
namingPattern: 'module', // 转换模式,取值为 global/module
generateScopedName: '[name]__[local]___[hash:base64:5]',
},
},
},
// 自定义 Webpack 配置
webpackChain(chain, webpack) {},
},
// H5 端专用配置
h5: {
publicPath: '/',
staticDirectory: 'static',
postcss: {
autoprefixer: {
enable: true,
},
cssModules: {
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
config: {
namingPattern: 'module', // 转换模式,取值为 global/module
generateScopedName: '[name]__[local]___[hash:base64:5]',
},
},
},
// 自定义 Webpack 配置
webpackChain(chain, webpack) {},
devServer: {},
},
}
module.exports = function (merge) {
if (process.env.NODE_ENV === 'development') {
return merge({}, config, require('./dev'))
}
return merge({}, config, require('./prod'))
}
更多配置方式,可查看官网。
二、自适应单位配置
1.单位默认转换规则
在 Taro 中尺寸单位建议使用 px
、 百分比 %
,Taro 默认会对所有单位进行转换。在 Taro 中书写尺寸按照 1:1 的关系来进行书写,即从设计稿上量的长度 100px
,那么尺寸书写就是 100px
,当转成微信小程序的时候,尺寸将默认转换为 100rpx
,当转成 H5 时将默认转换为以 rem
为单位的值。
如果你希望部分 px
单位不被转换成 rpx
或者 rem
,最简单的做法就是在 px 单位中增加一个大写字母,例如 Px
或者 PX
这样,则会被转换插件忽略。
结合过往的开发经验,Taro 默认以 750px
作为换算尺寸标准,如果设计稿不是以 750px
为标准,则需要在项目配置 config/index.js
中进行设置,例如设计稿尺寸是 640px
,则需要修改项目配置 config/index.js
中的 designWidth
配置为 640
:
/config/index.js
const config = {
projectName: 'myProject',
date: '2018-4-18',
designWidth: 640,
....
}
目前 Taro 支持 750
、 640
、 828
三种尺寸设计稿,换算规则如下:
const DEVICE_RATIO = {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2,
}
建议使用 Taro 时,设计稿以 iPhone 6的 750px
作为设计尺寸标准。
同上,如果你的设计稿是 375
,不在以上三种之中,那么你需要把 designWidth
配置为 375
,同时在 DEVICE_RATIO
中添加换算规则如下:
const DEVICE_RATIO = {
640: 2.34 / 2,
750: 1,
828: 1.81 / 2,
375: 2 / 1,
}
备注:
Taro v3.4.13 开始支持配置函数形式的
designWidth
,借此开发者可以动态地设置designWidth
,详情请查看:config.designWidth
2.单位转换函数
Taro 会帮你对样式做尺寸转换操作,但如果是在 JS 中书写了行内样式,那么编译时就无法做替换了,针对这种情况,Taro 提供了 API Taro.pxTransform
来做运行时的尺寸转换。
Taro.pxTransform(10) // 小程序:rpx,H5:rem
默认配置会对所有的 px
单位进行转换,有大写字母的 Px
或 PX
则会被忽略。
postcss.pxtransform
的参数默认值如下:
config/index.js
config = {
mini: {
postcss: {
pxtransform: {
enable: true,
config: {
onePxTransform: true,//设置 1px 是否需要被转换
unitPrecision: 5,//REM 单位允许的小数位。
propList: ['*'],
selectorBlackList: [],//黑名单里的选择器将会被忽略
replace: true,//直接替换而不是追加一条进行覆盖
mediaQuery: false,//允许媒体查询里的 px 单位转换
minPixelValue: 0
}
}
}
}
h5: {
postcss: {
pxtransform: {
enable: true,
config: {
onePxTransform: true,
unitPrecision: 5,
propList: ['*'],
selectorBlackList: [],
replace: true,
mediaQuery: false,
minPixelValue: 0,
baseFontSize: 20,
maxRootSize: 40,
minRootSize: 20
}
}
}
}
}
配置规则对应到 config/index.js
,例如:
/config/index.js
{
h5: {
publicPath: '/',
staticDirectory: 'static',
postcss: {
autoprefixer: {
enable: true
},
pxtransform: {
enable: true,
config: {
selectorBlackList: ['body']
}
}
}
},
mini: {
// ...
postcss: {
pxtransform: {
enable: true,
config: {
selectorBlackList: ['body']
}
}
}
}
}
Web 端使用
rem
单位时会注入脚本用于设置 body 上的font-size
属性,其他单位无该操作。
/* `px` is converted to `rem` */
.convert {
font-size: 16px; // converted to 1rem
}
/* `Px` or `PX` is ignored by `postcss-pxtorem` but still accepted by browsers */
.ignore {
border: 1px solid; // ignored
border-width: 2px; // ignored
}
忽略样式文件
对于头部包含注释 /*postcss-pxtransform disable*/
的文件,插件不予处理。
忽略样式举例
样式文件里多行文本省略时我们一般如下面的代码:
.textHide {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
text-overflow: ellipsis;
overflow: hidden;
}
但 Taro 编译后少了 -webkit-box-orient: vertical;
这条样式属性,此时我们需要忽略掉这条样式
1 加入 CSS 注释强制声明忽略下一行
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;