Javascript 如何根据js文件是开发环境还是生产环境动态导入或要求它? 问题
我知道ES6导入和节点需要使用静态分析,不支持动态路径。但是我们如何解决这个问题呢?解决办法是什么 在安装过程中,My Electron app会将shortcuts.js文件从开发项目文件夹[project\u dir]/public/resources复制到[app\u installation\u dir]/resources文件夹中 所以问题是: 在开发过程中,应用程序应导入../public/resources/shortcuts.js 在生产中,应用程序应导入[app\u installation\u dir]/resources/shortcuts.js 我无法为生产指定非动态路径,因为我事先不知道[app_installation_dir]路径是什么 密码 我尝试了以下方法,但预期只有else早午餐有效: const shortcuts=process.env.NODE_env===='production' ? 需要`${process.resourcesPath}/shortcuts.js`.data :require../public/resources/shortcuts.js`.data 在生产环境中安装应用程序后,我发现错误:Javascript 如何根据js文件是开发环境还是生产环境动态导入或要求它? 问题,javascript,node.js,import,electron,Javascript,Node.js,Import,Electron,我知道ES6导入和节点需要使用静态分析,不支持动态路径。但是我们如何解决这个问题呢?解决办法是什么 在安装过程中,My Electron app会将shortcuts.js文件从开发项目文件夹[project\u dir]/public/resources复制到[app\u installation\u dir]/resources文件夹中 所以问题是: 在开发过程中,应用程序应导入../public/resources/shortcuts.js 在生产中,应用程序应导入[app\u insta
Uncaught Error: Cannot find module [app_installation_dir]/resources/shortcuts.js
我想,由于require没有将动态路径视为它可以导入的内容,所以文件存在于该路径
然后,我将文件从module.exports转换为export default{},并尝试了以下ES6方法,但得到了相同的错误:
如果process.env.NODE_env==='生产'{
const importPath=path.joinprocess.resourcesPath,'shortcuts.js'
导入路径
.thendata=>{
console.log“导入数据”,数据
}
}
否则,如果process.env.NODE_env===“开发”{
导入“../public/resources/shortcuts.js”
.thendata=>{
console.log“导入数据”,数据
}
}
babel.config.js
module.exports={
预设值:[
“@vue/cli插件babel/preset”,
]
}
创建的项目
有趣。假设路径是绝对的,我不明白为什么require方法不起作用。如果shortcuts.js包含可以导出为纯JSON的数据,我可能会尝试将该文件转换为JSON,并使用文件系统读取和解析它
import fs from 'fs'
const shortcuts = JSON.parse(process.env.NODE_ENV === 'production'
? fs.readFileSync(`${process.resourcesPath}/shortcuts.json`).toString())
: fs.readFileSync(`../public/resources/shortcuts.js`).toString()).data
这回答了你的问题吗@雅各布:不,还是一样的错误。我更新了问题,展示了我所做的。我需要安装其他的巴别塔预设才能工作吗?@Rhayene谢谢你的建议,但没有帮助。当我使用process.env.NODE_env==='production'@Rhayene时,我也会遇到同样的错误。对不起,我不理解这个问题。我从来没有用过REPL。但是,即使节点的require有问题,我也不明白为什么下面的ES6方法也不起作用:importimportPath.thendata=>{}。正如我提到的,我改变了文件从module.exports/require导出默认值{}/importYeah的方式,我不知道为什么它没有看到它。我将错误路径复制/粘贴到文件资源管理器中,它会打开文件。也许这就是我出口的方式?js看起来像这个导出默认值{shortcut1:{key1:'value1'}}谢谢你的建议。我想我别无选择,只能使用这种方法
import fs from 'fs'
const shortcuts = JSON.parse(process.env.NODE_ENV === 'production'
? fs.readFileSync(`${process.resourcesPath}/shortcuts.json`).toString())
: fs.readFileSync(`../public/resources/shortcuts.js`).toString()).data