微信小程序 绝对路径 require

根据 微信小程序开放文档

参数 path 类型 string

需要引入模块文件相对于当前文件的相对路径,或npm模块名,或npm模块路径。不支持绝对路径

总有一些公共js代码,需要放在一个统一的目录下,大部分情况我们这样放

lib/base64.js
lib/moment.js
lib/api.js

合理组织过的 page 路径一般都不止一层,然后 page 里的 require

require('../../../lib/moment.js');
require('../../../lib/api.js');

WTF,这简直逼死强迫症,没强迫症看着也嫌弃
不嫌弃的请直接窗口右上角按 X

嫌弃完了,实在觉得不能忍,寻求解决办法
最后找到的方法,不能说优雅,但是出乎意料的 简单 暴力 直接 有效

只需要在 app.js 中增加 1 行代码,

App({
    // 真的就这一行
    require : function($uri){return require($uri)},
    onLaunch : function(){
    }
});

然后其他任何路径下的 js 如下

// pages/admin/order/list/page.js
const app = getApp(); // 
// 除了不是 / 开头,这真的就是个绝对路径,让那些 ../../.. 见鬼去吧
const Api = app.require('lib/api.js');

Page({
    onLoad : function(){
    }
});
文章以外:

微信其实可以调整一下,默认有个 app.require 的类似实现
require 的 uri 是 / 开头的,内部使用 app.require
这样 require 直接就可以 支持绝对路径了

阅读 249更新于 11月16日
推荐阅读
目录