使用Electron+avalon+jquery+codemirror开发本身的IDE

在纠结了一个月以后,发了无数帖子,我终于舍弃nw.js投入electron的怀抱,事实证实我是对的,electron竟然有中文文档,还有官方示例,简直不要太爽!javascript

clipboard.png

1.electron基础知识

1.主渲染进程
让咱们来看看electron的入门例子,css

//  引入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(); 
  }
});

讲解:我开始也疑惑了好久主进程和渲染进程究竟是个什么玩意?有什么关系?
我粗浅的理解:html

  • 主进程 main.js来代替,是程序的入口,他是跑在node上的东西,负责调用electron的相应模块,把你这个应用从html到桌面应用创建起来,好比里面的new BrowserWindow就是创建一个新窗口,可是真正这个界面什么样的,界面的各类div的点击事件,是不归他管的,可是这个应用的放大缩小,启动关闭,原生的菜单栏,打开文件窗口都是由他来管,渲染进程管不了,试想一下,要是网页内部能够随意控制这个应用的关闭打开,不是很危险?java

  • 渲染进程 index.js来代替,其实就是网页引用的js文件,你能够粗浅的理解他跑在浏览器上,换了个名字而已,可是由于是桌面应用,基于浏览器的多线程,能够打开不少页面,这里也能够有不少渲染进程,并且index.js中可使用node的模块,好比node

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

文件读错了能直接alert!这不是很爽!
相关api你们能够查阅
https://github.com/electron/e... 写的很是详尽!jquery

基本知识有了,你们能够来搭建开发环境了。webpack

2. 环境搭建

  1. sf上的教程比较老了,如今没有npm install electron-prebuilt了,直接npm install electron -g,而且在开发目录也进行安装便可,这里本地目录新手能够不要本身安装,使用官方的实例代码,而后就能够看到我以前给的main.js,你们能够把html改一改就能够创建本身的应用了,由于ide是个不怎么跳转的页面,很简单,全部这里面没啥技术含量,可是可让你们快速上手electron的配置,我就来说一讲。git

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

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

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

在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了,很酷炫是否是!

相关文章
相关标签/搜索