На этой неделе я столкнулся с проблемой. Мне пришлось создать простое настольное приложение, которое дает пользователю комбинаторный анализ числовой последовательности. Со сроком один день. Я закончил тем, что делал на Java, используя Swing (да, я знаю, это не лучший способ сделать это, но на данный момент я просто продолжаю думать, что простота всегда лучше). Попутно я нахожу замечательную платформу для создания настольных приложений под названием Electron.

Electron — это фреймворк с открытым исходным кодом, разработанный GitHub. Он позволяет разрабатывать настольные приложения с использованием среды выполнения Node.js и веб-браузера Chromium. Electron — это фреймворк для текстовых редакторов Atom и Visual Studio Code. Эта технология позволяет нам использовать мощь веб-технологий и использовать их для разработки настольных приложений.

Итак, после сдачи проекта я решил сделать это снова, на этот раз с Electron e Angular 2.

Почему я выбираю Angular 2? Цитируя легендарного человека новое всегда лучше. Если вы хотите знать, как все прошло, следуйте за мной, я дам вам пошаговую инструкцию, как начать проект с Electron и Angular 2.

Для начала убедитесь, что у вас установлены последние версии Node.js и npm. Создайте новый каталог и создайте новый проект с помощью следующей команды:

инициализация нпм

Ответьте на заданный вопрос. После установки электронного фреймворка:

npm установить предварительную сборку электронов — save-dev

Теперь создайте новый файл с именем index.js и добавьте в него приведенный ниже код (это тот же код, который можно найти в сид-фразе быстрого старта на веб-сайте Electron).

const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win
function createWindow () {
  win = new BrowserWindow({width: 800, height: 600})
  win.loadURL(url.format({
    pathname: path.join(__dirname, 'app/index.html'),
    protocol: 'file:',
    slashes: true
  }))
  win.webContents.openDevTools()
  win.on('closed', () => {
    win = null
  })
}
app.on('ready', createWindow)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
app.on('activate', () => {
  if (win === null) {
    createWindow()
  }
})

Создайте новый каталог с именем app и добавьте в него файл index.html. Откройте файл index.html и добавьте в него приведенный ниже код.

<html>
    <head>
        <title>First App</title>
    </head>
    <body>
          <h1>Hello World</h1>
    </body>
</html>

Теперь откройте файл package.json и измените сценарии, чтобы включить start, как показано ниже.

"scripts": {
    "start": "electron ."
  },

Затем вы можете проверить и проверить, работает ли.

запуск нпм

Вы должны увидеть простое окно с надписью Hello world. Хорошо, это ваше настольное приложение, созданное с помощью электрона. Теперь давайте используем angular 2.

Откройте package.json и добавьте в него указанные ниже зависимости.

"devDependencies": {
    "electron-prebuilt": "^0.37.8",
    "ts-loader": "^0.7.2",
    "typescript": "^1.7.3",
    "webpack": "^1.12.9",
    "webpack-dev-server": "^1.14.0"
  },
  "dependencies": {
    "angular2": "2.0.0-beta.17",    
    "es6-shim": "^0.35.0",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.6",
    "zone.js": "^0.6.12"
  
  }

После добавления зависимостей снова запустите npm install.

Теперь мы будем использовать typescript для написания приложения. Поэтому для компиляции файлов машинописного текста нам нужен tsconfig.json, в котором указаны параметры. Давайте создадим файл tsconfig.json. Добавьте в него приведенный ниже код.

{
  "compilerOptions": {
    "target": "ES5",
    "module": "commonjs",
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true
  },
  "files": [
      "app/app.ts"
  ]
}

Создайте новый файл с именем app.ts и добавьте в него приведенный ниже код.

///<reference path="../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from 'angular2/platform/browser';
import {Component} from 'angular2/core';
@Component({
    selector: 'myapp',
    template: '<h1>Angular 2 app inside a desktop app</h1>'
})
export class AppComponent {}
bootstrap(AppComponent);

Мы используем один компонент с простым текстом «Приложение Angular 2 внутри настольного приложения».

Откройте файл webpack.config.js (из каталога приложения) и добавьте в него приведенный ниже код.

var path = require('path');
var webpack = require('webpack');
var CommonsChunkPlugin = webpack.optimize.CommonsChunkPlugin;
module.exports = {
  devtool: 'source-map',
  debug: true,
entry: {
    'angular2': [
      'rxjs',
      'reflect-metadata',
      'angular2/core',
      'angular2/router',
      'angular2/http'
    ],
 'app': './app/app'
  },
output: {
    path: __dirname + '/build/',
    publicPath: 'build/',
    filename: '[name].js',
    sourceMapFilename: '[name].js.map',
    chunkFilename: '[id].chunk.js'
  },
resolve: {
    extensions: ['','.ts','.js','.json', '.css', '.html']
  },
module: {
    loaders: [
      {
        test: /\.ts$/,
        loader: 'ts',
        exclude: [ /node_modules/ ]
      }
    ]
  },
plugins: [
    new CommonsChunkPlugin({ name: 'angular2', filename: 'angular2.js', minChunks: Infinity }),
    new CommonsChunkPlugin({ name: 'common',   filename: 'common.js' })
  ]
};

Теперь снова откройте файл package.json и измените сценарии, как показано ниже.

Вот и все. Теперь запустите:

npm запустить сборку

Внутри вашего каталога должен быть новый каталог сборки с нашими файлами .js. Теперь нам нужно сослаться на них в index.html.

<html>
    <head>
        <title>First App</title>
    </head>
    <body>
        <myapp></myapp>
      <script src="../node_modules/angular2/bundles/angular2-polyfills.js"></script>
      <script src="../build/common.js"></script>
      <script src="../build/angular2.js"></script>
      <script src="../build/app.js"></script>
    </body>
</html>

Обратите внимание, что мы используем селектор для AppComponent.

Теперь откройте свой терминал и запустите:

запуск нпм

Теперь вы могли видеть, что шаблон в файле app.ts присутствует на экране нашего приложения, что означает, что приложение angular 2 создано, а затем запущено вместе с настольным приложением, созданным электроном. Вот как angular 2 можно использовать для создания настольных приложений вместе с электронной структурой.

Если вы хотите узнать больше, этот сайт мне очень помогает.