2016-03-23 24 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