2016-03-23 50 views
3

我已經使用GitHub的Electron構建了一個應用程序。我使用的加載模塊的推薦方式,對ES6語法:Electron應用程序上的意外令牌導入

import os from 'os'

下載boilerplate應用程序工作正常後。我已經能夠在background.js文件中導入腳本而沒有問題。下面是我如何加載我的自定義模塊:

import { loadDb } from './assets/scripts/database.js';

然而,當我內電子我然後加載JavaScript文件(clipboard.js)這反過來又試圖import模塊打開一個新的瀏覽器窗口(clipboard.html) 。在這一點上,我得到一個Unexpected token import錯誤。

clipboard.html

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Electron Boilerplate</title> 

    <link href="./stylesheets/main.css" rel="stylesheet" type="text/css"> 

    <script> 
     window.$ = window.jQuery = require('./assets/scripts/jquery-1.12.1.min.js'); 
    </script> 
    <script src="./assets/scripts/clipboard.js"></script> 
</head> 
<body class="clipboard">[...]</body></html> 

clipboard.js文件:

import { remote } from 'electron'; // native electron module 
import { loadDb } from './assets/scripts/database.js'; 

const electron = require('electron'); 

document.addEventListener('DOMContentLoaded', function() { 
    var db = loadDb(); 
    db.find({ type: 'text/plain' }, function (err, docs) { 
     var docsjson = JSON.stringify(docs); 
     console.log(docsjson); 
    }); 
}); 

只是再次重申,相同的代碼中app.html使用,這是我的應用程序的主窗口,這不錯誤。

感覺主窗口正在初始化我的clipboard.html窗口不是(可能是'Rollup'?),但是在我的應用程序的代碼中並沒有明確指出這一點。

+0

做,你可以發佈錯誤的行號? –

+0

第1行。註釋第1行給出了與第2行相同的錯誤。它無法識別單詞'import'似乎 – Mike

回答

3

您需要先通過彙總運行clipboard.js。彙總分析導入語句。您必須修改任務/ build/build.js才能完成此操作。

var bundleApplication = function() { 
    return Q.all([ 
      bundle(srcDir.path('background.js'), destDir.path('background.js')), 
      bundle(srcDir.path('clipboard.js'), destDir.path('clipboard.js')), // Add this line 
      bundle(srcDir.path('app.js'), destDir.path('app.js')), 
     ]); 
}; 
+0

那麼事後認爲是有道理的。你認爲這應該是電子文檔的一部分嗎?我意識到這不是電子特定的,但這並不明顯。我不得不挖掘,甚至發現,即使使用匯總 – Mike

+0

@mikemike它應該是文檔的一部分。我不知道爲什麼它不是。也許他們只希望你有一個入口點。 –

+0

@mikemike做了我的答案工作? –

0

@ user104317了它的權利,clipboard.js只是沒有得到 「編譯」 的rollup

只是想補充一點,在你的情況下,它應該是:

var bundleApplication = function() { 
    return Q.all([ 
     bundle(srcDir.path('background.js'), destDir.path('background.js')), 
     bundle(srcDir.path('app.js'), destDir.path('app.js')), 
     bundle(srcDir.path('assets/scripts/clipboard.js'), destDir.path('assets/scripts/clipboard.js')), 
    ]); 
}; 

然後,你可以將它留在./assets/scripts/clipboard.js

如果你最終有很多獨立的js文件(你不應該,如果你正在構建一個SPA),可以考慮自動列出這些,就像在./tasks/build/generate_spec_imports.js