#vue.js #webpack #electron-builder
#vue.js #webpack #электронный конструктор
Вопрос:
У меня есть новое приложение Vue / Electron, только что созданное с использованием vue-cli-plugin-electron-builder, которое будет использовать sqlite.
Базовая установка отлично работает в процессе разработки, пока я не запущу yarn add sqlite3
. Затем я получаю сообщение об ошибке отсутствия зависимости aws-sdk.
Исследования показывают, что это проблема с webpack, которую можно исправить с помощью внешних компонентов webpack.
И, из документов vue-electron-builder, аналогичное объяснение и исправление.
Я обновил свой vue.config.js и webpack.config.js файлы, основанные на этом, но я уже несколько часов нахожусь без разрешения.
Любая помощь или предложения приветствуются. Спасибо.
[внешний поток узла webpack на github] (https://github.com/liady/webpack-node-externals ) Чтение в webpack с помощью серверных приложений
// vue.config.js
module.exports = {
pluginOptions: {
electronBuilder: {
// List native deps here if they don't work
externals: [ 'sqlite3' ],
},
// If you are using Yarn Workspaces, you may have multiple node_modules folders
// List them all here so that VCP Electron Builder can find them
nodeModulesPath: ['../../node_modules', './node_modules']
}
}
//webpack.config.js
// this file is for cases where we need to access the
// webpack config as a file when using CLI commands.
const nodeExternals = require('webpack-node-externals');
let service = process.VUE_CLI_SERVICE
if (!service || process.env.VUE_CLI_API_MODE) {
const Service = require('./lib/Service')
service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
service.init(process.env.VUE_CLI_MODE || process.env.NODE_ENV)
}
module.exports = {
service.resolveWebpackConfig(),
externalsPresets: { node: true }, // in order to ignore built-in modules like path, fs, etc.
externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
}
//package.json
{
"name": "spectral",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"electron:build": "vue-cli-service electron:build",
"electron:serve": "vue-cli-service electron:serve",
"postinstall": "electron-builder install-app-deps",
"postuninstall": "electron-builder install-app-deps"
},
"main": "background.js",
"dependencies": {
"axios": "^0.21.1",
"core-js": "^3.6.5",
"sqlite3": "^5.0.0",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"webpack-node-externals": "^2.5.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.0",
"@vue/cli-plugin-eslint": "^4.5.0",
"@vue/cli-plugin-router": "^4.5.9",
"@vue/cli-service": "^4.5.0",
"babel-eslint": "^10.1.0",
"electron": "^9.0.0",
"electron-devtools-installer": "^3.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"vue-cli-plugin-electron-builder": "^2.0.0-rc.5",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
//sqlite connection setup
const path = require('path');
const sqlite3 = require('sqlite3').verbose()
const dbPath = path.resolve('src/db/spectral.db');
let db
export const conn = () => {
if (!db || !db.open) {
db = new sqlite3.Database(dbPath)
}
return db
}
Ответ №1:
Дополнительные исследования привели меня к этой теме, которая решила «ошибка sqlite3 not defined», но создала новую ошибку «требуется не найдено», которая потребовала добавления nodeIntegration = true в vue.config.js .
// working solution vue.config.js
module.exports = {
pluginOptions: {
electronBuilder: {
externals: ['sqlite3'],
nodeIntegration: true
},
}
};
Дополнительные ссылки
встроенные модули vue-electron-builder