Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据js文件是开发环境还是生产环境动态导入或要求它? 问题_Javascript_Node.js_Import_Electron - Fatal编程技术网

Javascript 如何根据js文件是开发环境还是生产环境动态导入或要求它? 问题

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

我知道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 在生产环境中安装应用程序后,我发现错误:

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