7***@qq.com
7***@qq.com
  • 发布:2024-07-17 21:42
  • 更新:2024-07-18 17:36
  • 阅读:188

在vue页面中动态引入js文件,hbuilder中运行,浏览器显示。控制台一直提示找不到文件,但静态引入是没问题的。不知道这是怎么回事?

分类:uni-app
        onLoad: function(jsName) {  
            // 假设从后端获取的返回值是 'json'  
            //const scriptName = 'json';  
            this.loadScript("./json.js").then(data => {  
                this.setData({  
                    tabbar: data  
                });  
            }).catch(err => {  
                console.error('Failed to load script:', err);  
            });  
        },  
        onReady() {  
            this.getMenuItemTop()  
        },        
        methods: {        
            // 动态加载脚本的方法  
            async loadScript(scriptPath) {  
                try {  
                    const module = await import(scriptPath);  
                    return module.default || module;  
                } catch (error) {  
                    throw new Error(`Failed to import script at ${scriptPath}: ${error}`);  
                }  
            },
2024-07-17 21:42 负责人:无 分享
已邀请:
BFC

BFC

你好, vue2的项目的动态加载模块是基于webpack的, webpack的import不能很好的支持动态加载功能。 这边推荐两种解决方案

方案一. 使用webpack 的require.context 技术来实现 动态加载模块。webpack文档 require.context
demo 如下

{  
        onLoad() {  
            this.loadScript('./json.js').then((res) => {  
                console.log({res})  
            })  
        },  
        methods: {  
            async loadScript(scriptPath) {  
                var context = require.context('./', true, /\.js$/, 'lazy');  
                const module = await context(scriptPath)  
                return module.default || module;  
            },  
        },  
}

方案二. 根据项目大小,可以考虑升级为vue3 项目, vue3项目底层基于vite构建,动态加载模块功能可以正常使用

要回复问题请先登录注册