当加载应用程序时,在webpack捆绑包中包含的< strong > electron / index.js 中会收到以下错误消息:
Uncaught TypeError: fs.existsSync is not a function (index.js:6)
文件看起来相当简单:
var fs = require('fs')
var path = require('path')
var pathFile = path.join(__dirname, 'path.txt')
if (fs.existsSync(pathFile)) {
module.exports = path.join(__dirname, fs.readFileSync(pathFile, 'utf-8'))
} else {
throw new Error('Electron failed to install correctly, please delete node_modules/' + path.basename(__dirname) + ' and try installing again')
}
//////////////////
// WEBPACK FOOTER
// ./~/electron/index.js
// module id = 609
// module chunks = 2
这里有趣的事情是,另一个内置模块 path 在同一段代码中没有问题。当我查看电子应用程序的开发工具时,我可以看到预期的
path
方法以及两个静态属性(分隔符)。但是当我查看 fs
对象时,我发现它只是一个空的 Object
,其原型对应于 NodeJS 6。我在 Angular 服务文件 service.ts 中导入了 electron API,这非常简单:
import * as electron from 'electron' ;
import {Injectable} from '@angular/core' ;
@Injectable()
export class Electron {
getRemote(): any { return electron.remote ; }
这个模块从未被调用,只是在app.module.ts中导入。我创建它只是为了查看可能的编译错误。
至于环境,我在devDependencies中安装了typings,然后安装了dt~node和dt~electron(在typings/global/electron/index.d.ts中存在一些问题,tsc无法识别Promise<any>,我不得不手动替换为any才能使electron主文件的编译成为可能)。
只要我不想使用electron API(electron.remote
),一切都正常,angular中有一些小问题与此无关。但是,一旦我尝试导入electron,就会出现奇怪的错误。
有什么办法可以克服这个问题或者在哪里寻找原因?为什么一个内置的nodejs模块path可以无问题导入,但是在同一个文件中,另一个内置模块fs的require()返回了不是fs的东西?
版本(渲染进程中的process.versions):
ares:"1.10.1-DEV"
atom-shell:"1.4.14"
chrome:"53.0.2785.143"
electron:"1.4.14"
http_parser:"2.7.0"
modules:"50"
node:"6.5.0"
openssl:"1.0.2h"
uv:"1.9.1"
v8:"5.3.332.47"
zlib:"1.2.8"
我运行编译的 NodeJS 版本是 6.9.3 x64 Windows。
electron.remote
API。https://github.com/JonnyBGod/angular2-webpack-advance-starter - Jindrich Vavruskaimport remote from 'electron';
时出现了相同的问题 - 显然,electron 包中存在一些错误导致模块解析器在 fs 上失败。 - Jindrich Vavruska