2016-12-13 23 views
2

傍晚,
我正在研究使用electron打包現有的angular2構建。我認爲我有一個幹運轉的工作,但實際的包裝似乎失敗(見下面的最後一步),我想明白爲什麼。下面是我在做什麼...電子 - 不允許加載本地資源

創建項目
使用angular-cli啓動一個新項目ng new electron-ng2-cli --style=scss

安裝電子和electron-builder

編輯的package.json
做出如下補充...
"main": "main.js"

"build": 
{ 
    "appId": "com.electrontest.testapp", 
    "mac": { 
    "category": "your.app.category.type" 
    } 
} 

,並添加以下到scripts ...

"pack": "build --dir", 
"dist": "build", 
"electron": "electron main.js", 
"postinstall": "install-app-deps" 

創建main.js
我剛剛從electron quick start複製的代碼。我所做的唯一改變是的index.html位置,我設置爲/dist/index.html

修訂基地
index.html變化<base="/"><base="./">

包代碼
運行ng build。這使得所有的包裝代碼/dist

測試運行
運行npm run electron。這工作正常。一個電子應用程序啓動,我看到有角的東西在裏面運行。

創建分發應用程序
運行npm run pack創建打包應用程序。包裝似乎沒問題 - 我收到一個關於丟失圖標的警告,並警告說我的代碼沒有簽名,但我猜他們不應該是致命的?
的問題是,當我現在在Finder運行通過雙擊應用程序,我在控制檯中的錯誤說:Not allowed to load local resource: file:///Users/<username>/Documents/development/electron-ng2-cli/dist/mac/electron-ng2-cli.app/Contents/Resources/app.asar/dist/index.html


所以,任何人都可以解釋什麼是打包應用程序失敗,並且運行正常的一個之間的不同當我使用 npm run electron

我能做些什麼來解決這個問題並讓應用程序正常運行?

謝謝你讓它結束。這比我想要的要長,但我希望我能解釋一下自己。如果你能幫助或者給那將是巨大的指針 - 許多良好的共鳴會在你的大方向被認爲:)

乾杯所有

回答

7

花了大量的試驗和錯誤的,但我得到了這個工作。這裏有很多我不完全理解的東西,其中很多可能是毫無意義或不好的練習,它可能會在下一步驟中崩潰,但如果像我一樣,只是想要克服第一個麻煩,那麼也許我發現的東西會幫助你。

我發現問題unpackingelectron-builder產生的app.asar文件。它不包含我的dist文件夾中的捆綁代碼,而是包含所有項目代碼(*.ts *.scss等)。問題只是包裝功能包裝了錯誤的東西。
當你把它們放出來時,將正確的源代碼放入最終應用程序的步驟很簡單,但是我們的上帝,他們沒有一半投入戰鬥!從我在最初的問題離開的地方開始,我做了以下...

請記住,我的項目結構是由角CLI

電子專用文件
我感動設置默認一個將main.js降到src,並將其名稱更改爲electron-main.js,以防止與已存在的main.ts混淆。我還將其參考路徑更改回/index.html
接下來,我創建了一個新的應用水平package.jsonsrc,給了以下內容:

{ 
    "name": "application-name", 
    "description": "CLI app", 
    "author": "Me me me", 
    "version": "0.0.1", 
    "main": "electron-main.js" 
} 

角cli.json
我改變了outDirbuild純粹是因爲電子在默認情況下,似乎輸出到dist在這個階段我想要一些分離。然後我將package.jsonelectron-main.js加到assets陣列中。

主package.json
我刪除了"main":"main.js",因爲它顯然不再需要在這裏。在scripts中,我將測試命令更改爲electron build,以將其指向捆綁代碼所在的構建文件夾。
最後,我去build領域,增加了以下內容:

"directories": { 
    "buildResources": "build", 
    "app": "build" 
} 

現在看來很明顯的。這只是告訴編譯器在哪裏尋找將構成最終應用程序的資產。這是默認的工作目錄,這是我的問題。

使用此設置,我現在可以運行ng build將我的項目連同electron-main.jspackage.json一起捆綁到build文件夾中。
這做,我可以運行npm run electron快速啓動測試程序或npm run pack構建可從Finder啓動的應用程序。

繁榮。任務完成。我會回到這裏,十分鐘後另一個惱人的問題,我的期望。愛是愛的開發,這些天:)

+0

是否有另一種解決此問題的方法比這樣做? –

-1

我有同樣的問題。我只是將我的電子代碼更改爲

// and load the index.html of the app. 
    window.loadURL(url.format({ 
    pathname: path.join(__dirname, 'dist/index.html'), // important 
    protocol: 'file:', 
    slashes: true, 
    // baseUrl: 'dist' 
    })); 
相關問題