在开发扫码小程序中,遇到胡坑"require() 默认不支持绝对路径"及其解决方案。
在微信小程序中,require()
默认不支持绝对路径 (如/utils/store.js
或@/utils/store.js
),只能使用相对路径(如../../utils/store.js
)。
使用 resolveAlias
配置项用来自定义模块路径的映射规则。
配置了之后,会对 require
里的模块路径进行规则匹配并映射成配置的路径。
如果命中多条映射规则,则取最长的命中规则。
perl
{
"resolveAlias": {
"~/*": "/*",
"~/origin/*": "origin/*",
"@utils/*": "utils/*",
"subBUtils/*": "subpackageB/utils/*"
}
}
注意
1、resolveAlias
进行的是路径匹配,其中的 key 和 value 须以 /*
结尾。
配置了上述路径映射规则,会做如下匹配并转换
~/mod.js
->mod.js
~/origin/mod.js
->origin/mod.js
@utils/mod.js
->utils/mod.js
subBUtils/mod.js
->subpackageB/utils/mod.js
2、如果在 project.config.json 中指定了 miniprogramRoot,则 /*
指代的根目录是 miniprogramRoot 对应的路径,而不是开发者工具项目的根目录。
然后使用别名引用:
ini
const store = require('@utils/store.js'); // 等效于绝对路径
注意 :此功能需要基础库版本 2.12.0+ ,且仅支持require
,不支持import
。