Electron 应用程序上的意外令牌导入
Unexpected token import on Electron app
我已经使用 GitHub 的 Electron 构建了一个应用程序。我使用的是推荐的模块加载方式,ES6语法为:
import os from 'os'
下载 boilerplate 应用程序后运行良好。我已经能够毫无问题地在 background.js
文件中导入脚本。以下是我加载自定义模块的方式:
import { loadDb } from './assets/scripts/database.js';
但是,当我在 Electron 中打开一个新的浏览器 window (clipboard.html
) 时,我会加载一个 JavaScript 文件 (clipboard.js
),它会依次尝试import
个模块。此时我收到 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
中使用了相同的代码,这是我的应用程序的主要 window,这不会出错。
感觉主 window 正在初始化我的 clipboard.html
window 不是的东西(也许 'Rollup'?),但我的应用程序中没有任何明确的内容建议这个的代码。
您需要先 运行 clipboard.js 通过汇总。 Rollup 解析导入语句。你必须修改 tasks/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')),
]);
};
@user104317 做对了,clipboard.js
只是 rollup
没有得到 "compiled"。
只是想补充一下你的情况,应该是:
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
中所做的那样
我已经使用 GitHub 的 Electron 构建了一个应用程序。我使用的是推荐的模块加载方式,ES6语法为:
import os from 'os'
下载 boilerplate 应用程序后运行良好。我已经能够毫无问题地在 background.js
文件中导入脚本。以下是我加载自定义模块的方式:
import { loadDb } from './assets/scripts/database.js';
但是,当我在 Electron 中打开一个新的浏览器 window (clipboard.html
) 时,我会加载一个 JavaScript 文件 (clipboard.js
),它会依次尝试import
个模块。此时我收到 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
中使用了相同的代码,这是我的应用程序的主要 window,这不会出错。
感觉主 window 正在初始化我的 clipboard.html
window 不是的东西(也许 'Rollup'?),但我的应用程序中没有任何明确的内容建议这个的代码。
您需要先 运行 clipboard.js 通过汇总。 Rollup 解析导入语句。你必须修改 tasks/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')),
]);
};
@user104317 做对了,clipboard.js
只是 rollup
没有得到 "compiled"。
只是想补充一下你的情况,应该是:
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