Проблема
Я знаю, что ES6 imports
и NODE require()
используют анализ stati c и не поддерживают динамические c пути. Но как нам обойти это? Какое решение?
Приложение My Electron во время установки копирует файл shortcuts.js
из папки разработки (проекта) [project_dir]/public/resources
в папку [app_installation_dir]/resources
.
Итак, проблема в следующем:
- В разработке приложение должно импортировать
../public/resources/shortcuts.js
- В процессе производства приложение должно импортировать
[app_installation_dir]/resources/shortcuts.js
Я не могу указать путь "non-dynamici c" для производства, так как заранее не знаю, каким будет [app_installation_dir]
путь.
Код
I пробовал следующее, но, как ожидается, работает только else
бранч:
const shortcuts = process.env.NODE_ENV === 'production'
? require(`${process.resourcesPath}/shortcuts.js`).data
: require(../public/resources/shortcuts.js`).data
После установки приложения в производстве я получаю сообщение об ошибке:
Uncaught Error: Cannot find module [app_installation_dir]/resources/shortcuts.js
, поскольку я думаю, require
не видит динамический c путь как нечто, что он может импортировать (я проверил, файл существует по этому пути).
Затем я преобразовал файл из module.exports
в export default {}
и пробовал следующий метод ES6, но я получаю ту же ошибку:
if (process.env.NODE_ENV === 'production') {
const importPath = path.join(process.resourcesPath, 'shortcuts.js')
import(importPath)
.then((data) => {
console.log('IMPORT DATA', data)
})
}
else if (process.env.NODE_ENV === 'development') {
import('../public/resources/shortcuts.js')
.then((data) => {
console.log('IMPORT DATA', data)
})
}
babel.config. js
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
]
}
Проект создан
vue create app-name
> selected [babel, eslint]
vue add electron-builder