6

我正在使用 ES6 js 文件,然后由 gulp (browserify/babel) 编译,ES6 文件的示例是:

我有一个普通的 App.js 用于设置主窗口等。然后 html 页面将使用一个 main.min.js 文件,该文件基本上由我所有的 ES6 类编译到一个文件中组成:

loader.es6 文件

import Main from  './pages/Main.es6'

new Main()

Main.es6 文件

 import Vue from 'vue';

export default class Main extends Vue{
   constructor() {...}
   .....
}

编译并运行时,一切正常,一切都很好......但我想如果我想实现“IPC”,“远程”模块,我在编译时遇到问题,因为他们无法找到这些模块,无论是通过require()import..我的课程中的方法。

因此执行以下操作失败:

 import Remote from 'remote'
 import Main from  './pages/Main.es6'

 new Main()

或者

var Remote = require('remote')
import Main from  './pages/Main.es6'

new Main()

这是否有可能做到或实现,或者不需要更多的思考,请回到正常的 js。

任何想法/建议都会非常感谢

编辑:添加错误详细信息

有问题的示例文件Main.es6

var Remote = require('remote')请参阅顶部添加的 var ,这会导致以下错误。

甚至使用import Remote from 'remote'

{ [Error: Cannot find module 'remote' from '/Volumes/DAVIES/ElectronApps/electron-vuejs-starter/resources/js/pages']
 stream:
  { _readableState:
  { highWaterMark: 16,
    buffer: [],
    length: 0,
    pipes: [Object],
    pipesCount: 1,
    flowing: true,
    ended: false,
    endEmitted: false,
    reading: true,
    sync: false,
    needReadable: true,
    emittedReadable: false,
    readableListening: false,
    objectMode: true,
    defaultEncoding: 'utf8',
    ranOut: false,
    awaitDrain: 0,
    readingMore: false,
    decoder: null,
    encoding: null,
    resumeScheduled: false },
   readable: true,
   domain: null,
   _events:
  { end: [Object],
    error: [Object],
    data: [Function: ondata],
    _mutate: [Object] },
  _maxListeners: undefined,
  _writableState:
   { highWaterMark: 16,
    objectMode: true,
    needDrain: false,
    ending: true,
    ended: true,
    finished: true,
    decodeStrings: true,
    defaultEncoding: 'utf8',
    length: 0,
    writing: false,
    corked: 0,
    sync: false,
    bufferProcessing: false,
    onwrite: [Function],
    writecb: null,
    writelen: 0,
    buffer: [],
    pendingcb: 0,
    prefinished: true,
    errorEmitted: false },
  writable: true,
  allowHalfOpen: true,
  _options: { objectMode: true },
  _wrapOptions: { objectMode: true },
   _streams: [ [Object] ],
  length: 1,
   label: 'deps' } }
4

3 回答 3

6

就我而言,如果我尝试过,我将browserifybabelify一起使用:

var remote = require('remote')

我会得到错误:

错误:无法从 xxx 找到模块“远程”

但如果我尝试

var remote = window.require('remote')

有用。

import remote from 'remote'不起作用,好像 browserify 找不到那些未在package.json.

于 2015-10-23T02:47:16.060 回答
4

玩得很好,我设法让它以某种方式工作:

基本上,我在 html 页面中设置了远程和 ipc 模块,然后将它们传递到我的该页面的类中。

main.html

 <script>
   var remote = require('remote');
   var ipc = require('ipc');
   new Main(ipc);
 </script>

Main.js - 类文件

 export default class Main extends Vue{
  constructor(ipc) {
   ....
   ipc.send('listener here','message here');

   .....

可以在此分支中查看文件:

于 2015-07-06T21:18:24.153 回答
4

老实说,解决这个问题的最简单方法是不缩小二进制文件或使用 browserify。Electron 已经require在全局范围内——你需要做的就是通过 Babel 运行你的文件到 ES6 => ES5 编译它们(electron-compile也使这变得非常容易)。您的import声明将被翻译成require,Electron 会自动处理开箱即用。

通常,您在 Web 上习惯的许多优化策略(例如缩小或连接)在 Electron 中是不必要的或没有意义的,您大多可以不做!

于 2015-07-07T04:14:20.330 回答