2017-07-02 52 views
0

我不確定哪些平臺/工具是我的問題的根源,因此在SO上提出這個問題而不是Git-Hub存儲庫之一的問題。我試圖根據Polyonic開發一個項目。 Polyonic本身就是Electron和Ionic2的種子混搭。我的項目也使用node-serialport,這是一個本地模塊。使用Ionic2,串口和電子構建器構建電子系統

我的開發版本是: - 節點7.4.0 - 電子1.6.10

...在我的項目的src文件夾中運行ionic info給出:

global packages: 

    @ionic/cli-utils : 1.4.0 
    Cordova CLI  : 7.0.1 
    Gulp CLI   : CLI version 3.9.1 Local version 3.9.1 
    Ionic CLI  : 3.4.0 

local packages: 

    @ionic/app-scripts    : 1.3.7 
    @ionic/cli-plugin-cordova  : 1.4.0 
    @ionic/cli-plugin-gulp   : 1.0.1 
    @ionic/cli-plugin-ionic-angular : 1.3.1 
    Cordova Platforms    : browser 4.1.0 
    Ionic Framework     : ionic-angular 3.3.0 

System: 

    Node  : v7.4.0 
    OS   : Linux 4.6 
    Xcode  : not installed 
    ios-deploy : not installed 
    ios-sim : not installed 
    npm  : 4.0.5 

如果我這樣做npm install在src目錄中,然後npm install在根目錄中,npm start位於根目錄(在Polyonic種子中運行捆綁Ionic項目的gulp腳本),項目啓動並運行完美,沒有node-serialport問題。

如果我再在我的項目的根目錄運行electron builder建立一個可執行文件,然後運行可執行文件,在Chrome DevTools控制檯,我得到這樣的輸出:

Uncaught Error: The module '/home/vic/git/MyProject/build/node_modules/serialport/build/Release/serialport.node' 
was compiled against a different Node.js version using 
NODE_MODULE_VERSION 51. This version of Node.js requires 
NODE_MODULE_VERSION 53. Please try re-compiling or re-installing 
the module (for instance, using `npm rebuild` or`npm install`). 
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20) 
    at Object.Module._extensions..node (module.js:598:18) 
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 
    at Module.require (module.js:498:17) 
    at require (internal/module.js:20:19) 
    at bindings (/home/vic/git/MyProject/build/node_modules/bindings/bindings.js:76:44) 
    at Object.<anonymous> (/home/vic/git/MyProject/build/node_modules/serialport/lib/bindings.js:3:35) 

我認識到,有other related questions在SO上,建議使用electron-rebuild來確保本地模塊是針對Electron預期的節點版本構建的。但是,如果我去到項目src文件夾,然後運行:

rm -rf node_modules/serialport/build/* 
node_modules/.bin/electron-rebuild -w serialport -f 

...然後返回到我的項目的根文件夾,運行npm start(它通常像之前一樣運行),然後運行electron-builder並運行可執行文件,在Chrome DevTools控制檯,我得到這樣的輸出:

Uncaught Error: Cannot find module 'serialport' 
    at Module._resolveFilename (module.js:470) 
    at Function.Module._resolveFilename (/tmp/.mount_7laJTZ/usr/bin/resources/electron.asar/common/reset-search-paths.js:35) 
    at Function.Module._load (module.js:418) 
    at Module.require (module.js:498) 
    at require (internal/module.js:20) 
    at Object.<anonymous> (main.js:73788) 
    at __webpack_require__ (main.js:20) 
    at Object.<anonymous> (main.js:72414) 
    at __webpack_require__ (main.js:20) 
    at Object.<anonymous> (main.js:111408) 

這從工作比我做的事情electron-rebuild之前更遠的感覺。我哪裏錯了?任何幫助或建議,將不勝感激。

回答

2

如果您將在下個小時發送給我項目,我會調查什麼是錯的。您不需要自動使用電子重建 - 電子構建器重建。 (我是電子建設者維護者。)

+0

Whoa酷,我剛剛添加你作爲(私人)github回購協作者...看看在串行服務分支...你可以聊天我freenode處理vicatcu如果你想 – vicatcu

+0

你可能已經知道這一點,但仔細閱讀本地和電子節點的串行端口回購問題揭示了用戶空間中的許多混亂。我已經能夠成功地建立了瑣碎的項目:https://github.com/johnny-five-io/electron-serialport – vicatcu

+0

利用農閒直接的信息請與我聯繫(https://slackin.electron.build/)。不清楚如何使用freenode :) – develar

2

在使用@develar離線處理它之後,我們能夠解決問題。我在這裏回覆並接受他的回答,在信貸到期時給予貸款。

This PR到Polyonic項目是一個直接的結果。據我估計,關鍵的變化,然而,改變根的package.json的構建塊:

"build": { 
    "appId": "YOUR.APPID.GOES.HERE", 
    "directories": { 
    "app": "build" 
    } 
}, 

...並確保電子是在devDependencies部分,而不是依賴關係部分。

這裏的關鍵點是Polyonic,當您運行npm start捆綁的一切行動,並把它變成一個build文件夾在你的項目的根。然後運行cd build && electron .運行啓動項目。根據電子文檔生成器:

  • 目錄

    • buildResources =建立String - 要建立資源的路徑。
    • output = dist字符串 - 輸出目錄。
    • 應用字符串 - 應用程序目錄(包含應用程序的package.json),默認爲應用程序, WWW或工作目錄。

...所以設置build.directories.app到「構建」告訴電子製造商打包生成目錄,這是我需要的。