Сегодня мы поговорим о том, почему нам пришлось отказаться от Lasso, чтобы использовать Electron с MarkoJS, и рассмотрим несколько примеров «красивого краткого синтаксиса» Марко.

На прошлой неделе мы говорили о том, как настроить Electron с помощью MarkoJS и Lasso. Однако проблема, с которой мы столкнулись, заключалась в невозможности использовать Electron в качестве пульта дистанционного управления в нашем рендерере. Оказывается, это проблема и с Webpack, и для этого нужно добавить правило target: electron-renderer в webpack.config.js.

Мы надеялись, что сможем достичь аналогичного результата в конфигурации для Lasso, но в конце концов мы решили перейти на Webpack и смогли настроить наш пульт в MarkoJS, чтобы мы могли работать с Electron. Но не раньше, чем мы должны были зайти в наш webpack.config.js и также установить псевдоним. Добавление этого правила к нашему объекту resolve было немного сложно понять, но, к счастью, MarkoJS имеет большую поддержку, и сами создатели MarkoJS показали нам, что нам нужно правило aliasFields: ["browser"].

Подобные псевдонимы и таргетинг позволяют нам загружать index.marko файл в наше окно браузера Electron следующим образом ...

app.on('ready', ()=> {
  topWindow = new BrowserWindow()
  topWindow.loadURL('file://' + __dirname + '/index.marko')
  topWindow.webContents.openDevTools();
  topWindow.on('closed', ()=> {
    topWindow = null
  })
})

При использовании MarkoJS у нас есть возможность использовать его Краткий синтаксис. Было приятно работать над этим проектом, и нам было весело рефакторинг нашего кода. Вот пример сетки 3x3 с использованием краткого синтаксиса.

class {
  distract(url, e) {
    e.preventDefault()
    mainProcess.createWindow(url)
  }
}
div.grid
  div.cell on-click('distract', some url) -- Wikipedia
  div.cell on-click('distract', some url) -- TED Talk
  div.cell on-click('distract', some url) -- Beat Maker
  div.cell on-click('distract', some url) -- Music Videos
  div.cell on-click('distract', some url) -- Throw Your Trash Away
  div.cell on-click('distract', some url) -- Hustlin'
  div.cell on-click('distract', some url) -- Pointer
  div.cell on-click('distract', some url) -- Gif
  div.cell on-click('distract', some url) -- Staggering Beauty

Здесь мы можем создавать новые окна в Electron с событием щелчка в нашем компоненте Marko. Мы делаем это, экспортируя функцию createWindow из нашего main.js файла Electron и импортируя ее как mainProcess.createWindow в наш компонент Marko, вот так…

static {
  const electron = require('electron')
  const remote = electron.remote
  const ipc = electron.ipcRenderer
  const mainProcess = remote.require('./main')
  const currentWindow = remote.getCurrentWindow()
}

Хорошо! Это касается нашего эксперимента с Electron и MarkoJS.

Вот ссылка на наше репо, если вы хотите увидеть больше нашего кода.

Напишите мне, если у вас есть какие-либо вопросы или вы хотите получить zip-файл нашего приложения Electron.