爲實現"微信小程序雲開發"數據庫文件批量導入(官方工具僅支持單文件導入),學習electron,過年趁機開心一波,使用electron-vue實現微信小程序雲開發數據庫文件(夾)批量導入工具。css
爲了畢設項目,經過python
爬下了n多的單詞JSON數據(預計: 16w詞源,分佈於約81個文件內),可是須要導入到微信小程序雲開發的類MongoDB
數據庫。官方開發工具僅支持單文件上傳導入,一個文件一個文件的導入,那豈不「DIE」。html
需導入的文件目錄以下:前端
先使用sketch大概畫了一下設計圖,設計圖源文件vue
項目主要依賴於微信小程序雲開發http接口,微信文檔node
☁ 基於electron-vue實現的微信小程序雲開發數據庫文件批量導入。 ✨✨✨✨python
初始化過程就是一路選擇,而後install
就能夠,推薦先食用electron-vue文檔。webpack
electron-vue
開發,官方初始化方案以下(會遇到問題, 看下解析):# Install vue-cli and scaffold boilerplate npm install -g vue-cli vue init simulatedgreg/electron-vue my-project # Install dependencies and run your app cd my-project yarn # or npm install yarn run dev # or npm run dev 複製代碼
vue init simulatedgreg/electron-vue my-project
卡在模板下載的解決方案因爲官方模板使用github
源做爲模板,致使初始化very的慢,因此先使用國內源克隆,而後經過本地目錄執行vue init
git
cd ~/Code git clone https://gitee.com/mirrors/electron-vue.git #國內鏡像 vue init ~/Code/electron-vue project-name 複製代碼
npm install
安裝依賴過程當中electron
下載失敗使用官方的electron源下載安裝會一直失敗,梯zi以後也不行。因此仍是經過國內源來下載,分electron7以上版本和如下版本的方案,設置好源以後再次install
便可。github
# 1. v7以上 npm config set ELECTRON_MIRROR=https://cdn.npm.taobao.org/dist/electron/ npm config set electron_custom_dir=7.1.9 # 修改成須要安裝的版本 # 2. v7如下 npm config set ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/ 複製代碼
npm run dev
以後報錯error: Webpack ReferenceError: process is not defined// 修改下方兩個webpack配置文件中的HtmlWebpackPlugin配置 // .electron-vue/webpack.web.config.js // .electron-vue/webpack.renderer.config.js new HtmlWebpackPlugin({ filename: 'index.html', template: path.resolve(__dirname, '../src/index.ejs'), templateParameters(compilation, assets, options) { return { compilation: compilation, webpack: compilation.getStats().toJson(), webpackConfig: compilation.options, htmlWebpackPlugin: { files: assets, options: options }, process, }; }, minify: { collapseWhitespace: true, removeAttributeQuotes: true, removeComments: true }, nodeModules: process.env.NODE_ENV !== 'production' ? path.resolve(__dirname, '../node_modules') : false }), 複製代碼
electron
的理解:把本身的心態調整爲:正在開發瀏覽器端應用,只是這個瀏覽器容器「變小了」了,沒有標籤欄了。web
electron應用也存在跨域問題,一般前端中能夠找服務端經過cors
解決。但跨域問題本質是瀏覽器對不一樣源請求的一些限制。因此electron中最方便的方案,則是關閉瀏覽器的這一種限制。
// 主進程中,實例化窗口時設置BrowserWindow以下,就能夠關閉限制 mainWindow = new BrowserWindow({ // ... webPreferences: { webSecurity: false } }) 複製代碼
這一個只要你們心態對了,那就是瀏覽器應用開發,前端部分不深刻討論。
├── App.vue
├── assets
| ├── Github.png
| ├── choise.png
| ├── choise2.png
| ├── close.png
| ├── delete.png
| ├── login-active.png
| ├── login-disable.png
| ├── logo.png
| ├── no-choise.png
| └── no-choise2.png
├── components
| ├── DatabaseImport.vue
| └── Login.vue
├── main.js
├── router
| └── index.js
├── store
| ├── index.js
| └── modules
└── utils
├── api.js
├── disableDrag.js
└── tool.js
複製代碼
在主進程中設置BrowserWindow爲frame
, 隱藏默認窗口。
mainWindow = new BrowserWindow({ height: 316, useContentSize: true, width: 248, maximizable: false, resizable: false, webPreferences: { webSecurity: false }, frame: false, // 設置此屬性爲false icon: `${__static}/logo.png`, center: true }) 複製代碼
如此一下,窗口就不能拖動了。解決方案爲在渲染進程,全局app設置css屬性
/* app.vue style */ body, html { -webkit-app-region: drag; } 複製代碼
在開發環境不會禁用默認菜單,因此快捷鍵不會失效,可是打包爲production以後,打開的窗口就出現了問題,解決方案以下
import { globalShortcut } from 'electron' app.on('browser-window-focus', () => { if (!mainWindow) return if (process.platform === 'darwin') { let contents = mainWindow.webContents globalShortcut.register('CommandOrControl+C', () => { contents.copy() }) globalShortcut.register('CommandOrControl+V', () => { contents.paste() }) globalShortcut.register('CommandOrControl+X', () => { contents.cut() }) globalShortcut.register('CommandOrControl+A', () => { contents.selectAll() }) } }) // 注意globalShortcut註冊以後會覆蓋其餘的快捷鍵,因此blur的時候取消快捷鍵 app.on('browser-window-blur', () => { globalShortcut.unregisterAll() }) 複製代碼
electron
應用的優缺點優勢
易語言
能夠這麼🐂🍺的跨平臺,那我同樣的"小學生"就無敵了 ]缺點
electron-packager
和 electron-builder
姑且理解爲electron-packager
打包的的可執行文件(打開即用, 文件大), electron-builder
打包爲安裝包(壓縮包, 文件小)
electron-builder
打包報錯(忘記錯誤了...)升級electron-builder
爲最新版本便可。
祝各位攻城獅們,今年有"鼠"不盡的快樂!"鼠"不盡的收穫!"鼠"不盡的鈔票!"鼠"不盡的笑容!"鼠"不盡的幸福!" 😈辟邪「肺炎」! 🐀🐭