uniappH5和小程序动态导入模块的方法

Posted TA远方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uniappH5和小程序动态导入模块的方法相关的知识,希望对你有一定的参考价值。

做uniapp项目通常都是用import Module from "./../module.js"方式引用模块的,但是,这种方式是静态的,还是只能放在执行代码段的顶部(或者外部),若想放在代码中执行,那就会报错的,来看看如何解决吧。

各平台支持差异

方法名H5微信小程序
import()×
require()×

现在知道,H5项目可以用import().then()动态引入模块,而微信小程序就用require()动态导入。

在导入模块前,模块文件里的定义方式是这样的,代码如下

const template1 = ;
//...
export default 
	template1 

考虑到两个不同平台,就改成按条件编译,
例如,导入static文件夹里模块的方法实现,代码如下

importJsModuleFile(filename)
	return new Promise((resolve,reject)=>
		// #ifdef H5
		import(`./../static/$filename`).then(m=>resolve(m.default || m)).catch(reject);
		// #endif
		
		// #ifdef MP-WEIXIN
		try
			const m = require(`./../static/$filename`);
			resolve(m.default || m);
		catch(err)
			reject(err)
		
		// #endif
	);

如果require()引入模块报错 Cannot read property 'join' of null
疑是可能是文件相对路径填错了

编译微信小程序时,注意还要关闭依赖分析,
要关闭过滤无依赖,在uniapp项目里,找到配置文件manifost.json,以源码查看,"mp-weixin"这一项中 "settings" 选项添加两个属性


	//...
	ignoreDevUnusedFiles: false,
	ignoreUploadUnusedFiles: false

参考 如何解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错

不知道如何使用吗? 代码如下

//动态加载模块static资源
importJsModuleFile(filename).then(resouce=>
	console.log('template1', resouce)
	//...
).catch(err=>console.error(err));

动态导入模块

 

如反射的概念,可以通过hasattr(),getattr(),setattr(),delattr()将字符串类型的方法反射为可以直接调用的方法,那么模块的调用除了正常的调用外,是否也可以将个符串格式的模块名导入到当前目录下呢?

动态导入模块的使用:

官方推荐使用版:

import importlib
aa=importlib.import_module(\'lib.aa\')  

标准导入格式为:importlib.import_module(name,package)

 

解释器自身使用的是:

mod=__import__(\'lib.aa\')
obj=mod.aa.C()
print(obj.name)

  

以上代码使用的目录格式和代码为:

目录结构:

aa.py的代码:

class C:

    def __init__(self):
        self.name = \'alex\'

  

 

以上是关于uniappH5和小程序动态导入模块的方法的主要内容,如果未能解决你的问题,请参考以下文章

在反应中动态导入模块

uniapph5项目打包后修改不方便

vue和小程序的相似之处

uniapp微信登录h5登录App登录和小程序登录

python圆周率计算小程序(非常慢)

换手机 app和小程序能克隆吗