构建配置
如果你不熟悉webpack,可以通过脚手架进行。
手动配置
webpack.config.js
webpack.config.js
var MpxWebpackPlugin = require('@mpxjs/webpack-plugin')
webpackconfig = {
plugins: [
new MpxWebpackPlugin(options)
],
}
options
mode
String
wx
代表编译微信小程序ali
代表编译支付宝程序
@mpxjs/webpack-plugin
暴露了一个静态方法MpxWebpackPlugin.loader
作为.mpx
文件的loader
webpack.config.js
var MpxWebpackPlugin = require('@mpxjs/webpack-plugin')
webpackconfig = {
module: {
rules: [
{
test: /\.mpx$/,
use: MpxWebpackPlugin.loader(options)
}
]
}
}
options
transRpx
Object | boolean | string
false
关闭转换rpx'all'
普通样式中的px全部转换为rpx,rpx注释样式
不转换'only'
普通样式中的px全部不转换为rpx,rpx注释样式
转换Object包含属性:mode/comment/designWidth/include/exclude
comment (即将废弃外层写法,迁移至transRpx内层)
String
<style>
中的注释内容与options.comment
一致时,会被识别为一个rpx注释
designWidth (即将废弃外层写法,迁移至transRpx内层)
Number
mpx
会基于小程序标准的屏幕宽度baseWidth 750rpx
,与option.designWidth
计算出一个转换比例transRatio
转换比例的计算方式为
transRatio = (baseWidth / designWidth)
。精度为小数点后2位四舍五入所有生效的
rpx注释样式
中的px会乘上transRatio
得出最终的rpx值例如:
/* 转换前:designWidth = 1280 */
.btn {
width: 200px;
height: 100px;
}
/* 转换后: transRatio = 0.59 */
.btn {
width: 118rpx;
height: 59rpx;
}
rpx注释样式
根据rpx注释
的位置,mpx
会将一段css规则
或者一条css声明
视为rpx注释样式
开发者可以声明一段rpx注释样式,提示编译器是否转换这段css中的px
例子
- 全局转换px至rpx,除了某些
rpx注释样式
之外
webpack.config.js
module: {
rules: [
{
test: /\.mpx$/,
use: MpxWebpackPlugin.loader({
mode: 'all',
comment: 'use px',
designWidth: 750,
include: resolve('src')
},
})
}
]
}
}
index.mpx
第一个注释位于一个
选择器
前,是一个css规则注释
,整个规则都会被视为rpx注释样式
第二个注释位于一个
css声明
前,是一个css声明注释
,只有font-size: 100px
会被视为rpx注释样式
transRpx = all
模式下,除了这两条rpx注释样式之外,其他都会转rpx
- 只对某些
rpx注释样式
进行转rpx,全局其他px不转
webpack.config.js
webpackconfig = {
module: {
rules: [
{
test: /\.mpx$/,
use: MpxWebpackPlugin.loader({
transRpx: 'only',
comment: 'use rpx',
designWidth: 750
})
}
]
}
}
index.mpx
<style lang="css">
.not-translate-a {
font-size: 100px;
padding: 10px;
}
.not-translate-b {
font-size: 100px;
padding: 10px;
}
/* use rpx */
.translate-a {
font-size: 100px;
padding: 10px;
}
.translate-b {
/* use rpx */
font-size: 100px;
padding: 10px;
}
</style>
受限于小程序既有的能力,目前在小程序中加载本地图片资源会有诸多限制:
<style>
中的css属性值只能使用base64引用图片,无法用本地路径<template>
中的<cover-image>
组件的src属性只能通过本地路径,不能使用base64<template>
中的其他组件,例如<image>
的src属性既可以用本地路径,又可以用base64
@mpxjs/url-loader
对这些限制提供了增强。开发者在源码中无需书写base64,通过统一的路径方式引入图片资源,最终编译成小程序支持的代码。
想深入的了解
@mpxjs/url-loader
对小程序对图片资源的支持,查看mpx图像资源处理了解更多细节
安装
webpack.config.js
module: {
rules: [
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: '@mpxjs/url-loader',
options: /* options */
}
]
}
}
options
limit
Number
单位为byte,小于limit的资源会被base64,反之会被打包成资源
name
String
设置图片被打包后的路径:
'img/[name].[ext]'
内联资源query options
fallback
Any
通过内联query options,可以对指定的资源强制使用资源打包。
这对于
<cover-image>
组件引用图片资源非常有效,因为<cover-image>
组件不能用base64
例子
文件目录
webpack.config.js
webpackconfig = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: '@mpxjs/url-loader',
otions: {
limit: 10000,
name: 'img/[name].[ext]'
}
}
]
}
}
index.mpx
<template>
<image src="./bg-img1.png"></image>
<image src="./bg-img2.png"></image>
<cover-image src="./bg-img3.png?fallback">
</template>
bg-img1.png
大于10KB,会被打包成资源
bg-img2.png
小于10KB,会被做base64
bg-img3.png
需要在路径后添加fallback
强制打包资源
小程序限定,仅以后缀名进行区分。
因此output.filename
中必须写为 [name].js
,基于chunk id或者hash name的filename都会导致编译后的文件无法被小程序识别
webpack.config.js
webpackconfig = {
output: {
filename: '[name].js', // 正确
filename: '[id].js', // 错误。chunk id name
filename: '[name].[chunkhash].js' // 错误。hash name
}
}
为了减少打包后app/page/component目录中的js文件体积。mpx提供了抽取公共依赖
的能力。将共用的依赖进行统一抽取
通过optimization.runtimeChunk
和optimization.splitChunks
进行设置
webpackConfig = {
optimization: {
runtimeChunk: {
name: 'bundle'
},
splitChunks: {
cacheGroups: {
bundle: {
chunks: 'all',
name: 'bundle',
minChunks: 2
}
}
}
}