问题:带export 的 js 只能使用import 或 require 引入,
但是 import 或 require 导入的方法或者文件,它是依赖于本地环境的,必须在编译阶段可以解析路径。
所以 import 不允许引入外部链接文件,如果直接引入的话会报错
解决方案:后端返回文件内容作为函数内容,使用立即执行函数调用,需要注意的一点是字符串生成的立即执行函数无法自动地获取到当前文件里的变量,因此需要手动地在立即执行函数中传递所需变量
// 获取g4生成的js文件 getG4File() { let fileData = JSON.parse(sessionStorage.getItem("treeSelect")) // BasicLexer let data = { spaceName: fileData.spaceName, projectName: fileData.projectName, type: "js", name: "BasicLexer" } readResource(data).then((response) => { // console.log("获取g4生成的js文件", response) if( response.code == 200 ){ let content = response.data.content.replace("import antlr4 from 'antlr4';", "") content = content.replace("export default ", "") content = content + "that.LExprLexer = BasicLexer" new Function('antlr4', 'that', content)(antlr4, this) } }) // BasicParser data = { spaceName: fileData.spaceName, projectName: fileData.projectName, type: "js", name: "BasicParser" } readResource(data).then((BasicParserRes) => { if( BasicParserRes.code == 200 ){ let BasicParser = BasicParserRes.data.content // BasicListener let data = { spaceName: fileData.spaceName, projectName: fileData.projectName, type: "js", name: "BasicListener" } readResource(data).then((BasicListenerRes) => { if( BasicListenerRes.code == 200 ){ let BasicListener = BasicListenerRes.data.content // console.log("获取g4生成的js文件_BasicParser_BasicListener", BasicParser, BasicListener) // 处理 BasicParser BasicParser = BasicParser.replace("import antlr4 from 'antlr4';", "") BasicParser = BasicParser.replace("import BasicListener from './BasicListener.js';", "") BasicParser = BasicParser.replace("export default ", "") // 处理 BasicListener BasicListener = BasicListener.replace("import antlr4 from 'antlr4';", "") BasicListener = BasicListener.replace("export default ", "") BasicListener = BasicListener + "that.LExprParser = BasicParser" // 组合 BasicParser 和 BasicListener在一个文件 let contentTwo = BasicParser + BasicListener new Function('antlr4', 'that', contentTwo)(antlr4, this) this.ParseTreeAll(this.orgRule) } }) } }) },
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-12-22 不使用for循环生成1-100的数组(转)