运用Electron+avalon+jquery+codemirror开辟本身的IDE

在纠结了一个月以后,发了无数帖子,我终究舍弃nw.js投入electron的度量,事实证明我是对的,electron居然有中文文档,另有官方示例,几乎不要太爽!

《运用Electron+avalon+jquery+codemirror开辟本身的IDE》

1.electron基础知识

1.主衬着历程
让我们来看看electron的入门例子,

//  引入electron模块
const electron = require('electron'); 
//  掌握运用的生命周期,给app绑定种种状况事宜来掌握生命周期
const app = electron.app; 
//  掌握原生浏览器窗口
const BrowserWindow = electron.BrowserWindow; 
//  path途径治理模块
const path = require('path'); 
//  url治理模块
const url = require('url'); 
//  与衬着历程通讯的ipc模块
const ipc = require('electron').ipcMain;
//  永远寄存一个window对象的援用,不然会被对象渣滓接纳而使运用封闭
let mainWindow; 

//  天生一个浏览器窗口
function createWindow () {
  //  运用new 一个BrowserWindow对象实例猎取一个新的窗口,由于援用在表面不会被消弭
  mainWindow = new BrowserWindow({width: 1000, height: 750, resizable: true, frame:true});

  //  内核照样网页,因而要翻开网页
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  })); 

  //   启用开辟者东西
  //  mainWindow.webContents.openDevTools()

  //   给窗口封闭事宜设置回调函数,使这个实例为空
  mainWindow.on('closed', function () {
    //  假如运用支撑多窗口,应当将多个window对象放在一个数组中举行治理,与此同时,删除对应的元素
    mainWindow = null; 
  });
   //    衬着历程发送音讯,我请求你封闭运用!
  ipc.on('exitWindow',function () {
    mainWindow.close();
  });
}

//  给窗口预备设置回调,在创建了窗口后实行这个函数
app.on('ready', createWindow); 

//  给悉数窗口封闭时绑定回调,与上面差别,上面只烧毁对应的窗口对象,这里会完整退出
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit(); 
  }
});


//  给点击图标设置回调,开启一个新窗口
app.on('activate', function () {
  if (mainWindow === null) {
    createWindow(); 
  }
});

解说:我最先也迷惑了良久主历程和衬着历程究竟是个什么玩意?有什么关系?
我深刻的明白:

  • 主历程 main.js来替代,是顺序的进口,他是跑在node上的东西,担任挪用electron的响应模块,把你这个运用从html到桌面运用竖立起来,比方内里的new BrowserWindow就是竖立一个新窗口,然则真正这个界面什么样的,界面的种种div的点击事宜,是不归他管的,然则这个运用的放大减少,启动封闭,原生的菜单栏,翻开文件窗口都是由他来管,衬着历程管不了,试想一下,如果网页内部能够随便掌握这个运用的封闭翻开,不是很风险?

  • 衬着历程 index.js来替代,实在就是网页援用的js文件,你能够深刻的明白他跑在浏览器上,换了个名字罢了,然则由于是桌面运用,基于浏览器的多线程,能够翻开许多页面,这里也能够有许多衬着历程,而且index.js中能够运用node的模块,比方

    fs.readdir('av......',(err,data)=>{
        if(err){
            alert('啊呀片没了');
        }
    });

文件读错了能直接alert!这不是很爽!
相干api人人能够查阅
https://github.com/electron/e… 写的异常详实!

基本知识有了,人人能够来搭建开辟环境了。

2. 环境搭建

  1. sf上的教程比较老了,如今没有npm install electron-prebuilt了,直接npm install electron -g,并且在开辟目次也举行装置即可,这里当地目次新手能够不要本身装置,运用官方的实例代码,然后就能够看到我之前给的main.js,人人能够把html改一改就能够竖立本身的运用了,由于ide是个不怎么跳转的页面,很简单,一切这内里没啥技术含量,然则能够让人人疾速上手electron的设置,我就来说一讲。

    $ git clone https://github.com/electron/electron-quick-start     //下载官方示例代码
    $ cd electron-quick-start
    $ npm install && npm start //这条就是装置并运行了!
    
  2. 假如你要用到jquery,jq插件之类的看这里!!!!

    window.nodeRequire = require;
    delete window.require;
    delete window.exports;
    delete window.module;

    在html的最前面用script引入这段代码,以后用nodeRequire来替代node的require,由于require,module等已挂在window中,会和jquery争执

在webpack中只管运用import来引入模块而不是require,不然也会争执,我至今没找到处理方案。。。。。。

var webpack = require("webpack");
var path = require("path");
var pathMap = require('./src/pathmap.json');
var srcDir = path.resolve(process.cwd(), 'src');
var nodeModPath = path.resolve(__dirname, './node_modules');

module.exports = {
    entry: {
        index:"./src/js/index.js"
    },//进口js,可为数组
    output: {
        path: path.join(__dirname, "src/dist"),
        filename: "[name]pack.js"
    },
    module: {
        loaders: [
            {
                test: /\.scss$/,
                loader: 'style-loader!css-loader!sass-loader'
            },
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader'
            }
        ],
    },
    resolve: {
        extensions: ['.js', "", ".css", ".scss"],//指明那些文件名是webpack要扫描到的
        root: [srcDir, nodeModPath],
        alias: pathMap,
        publicPath: '/'
    },

}

webpack.config没什么希奇的,就是配了avalon的途径和sass-loader注重假如你要运用scss也是sass-loader,只管运用cnpm来处理node-sass的坑,webpack的设置我就不讲了

设置好了就能够兴奋的最先开辟了!实在照样传统的写网页罢了,只不过能够到场node了,很酷炫是否是!

    原文作者:seunxtw
    原文地址: https://segmentfault.com/a/1190000007678113
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞