基于JavaScript的桌面应用入门
写在前面
为了让自己的博客体验更好,也方便自己平时发布,打算从零开始打造一个自己的博客文章发布平台。当然在这个过程中肯定会用到一些很优秀的第三方插件,这样一方面可以减少自己的工作量,一方面可以学习一下其他优秀的工具。
简介
electron: 使用 web 技术构建跨平台桌面应用程序
Electron 是一个原本为 Atom 编辑器设计的,跨平台的应用外壳(Application Shell),它将 Chromium 和 Node.js 的事件循环整合到了一起,同时提供了一些与原生系统交互的 API。
一个开源的跨平台的桌面应用构建框架,与node-webkit(简称 nw.js)类似,具体对比可以参见知乎上的一个讨论——用 Nodejs 开发桌面应用。NW.js 和 Electron 各有什么优缺点,你选择哪个?。由于我自己对 web 相对熟悉一下,所以选择这张基于 web 的方式构建桌面平台应用,进行对比后我选择了 electron。
- 英文官网:http://electron.atom.io/
- github 地址: https://github.com/atom/electron
- 中文文档:docs-translations/zh-CN
markdown: 一种最流行的博客书写语法
markdown拥有简单的语法和众多开源的插件和使用者,markdown 写博客无疑是一种不错的选择,同时可以让博客整体风格统一,而且让大家更加熟悉和适应。
使用语法:
Vue.js: 数据驱动的组件,为现代化的 Web 界面而生
- 中文官网: http://cn.vuejs.org
- Markdown 编辑器 Example:http://cn.vuejs.org/examples/_
本例子中用到了一个非常强大的 markdown 语法解析器marked.js。
marked.js: 一个高效的 markdown 语法解析器
- github 地址: https://github.com/chjj/marked
项目实战
1.又见 hello word!
下载 electron,https://github.com/atom/electron/releases/
electron 是绿色软件,下载下打开electron.exe即可使用。
如果打开后看到这个界面说明下载运行成功。
你可以下载electron-quick-start查看演示工程或者看下载electron时根目录下的的 resources 下的 default_app 工程。这里我们选择自己写一个工程,下面书写 helloworld:
Electron 应用的目录结构如下:
- app/
- ├── package.json
- ├── main.js
- └── index.html
新建一个 app 文件夹 将这三个文件都放在里面,package.json 的格式和 Node 模块中的完全一致。你应用的启动脚本(的路径)需要在 app/package.json 中的 main 属性中指定。package.json 的内容:
{
"name": "Hello WorLd",
"version": "0.1.0",
"main": "main.js"
}
app/main.js 是我们应用的入口。它负责创建主窗口和处理系统事件。 main.js 应该如下所示:
"use strict";
//应用的控制模块
const electron = require("electron");
const app = electron.app;
//创建原生浏览器窗口的模块
const BrowserWindow = electron.BrowserWindow;
let mainWindow;
//初始化并准备创建浏览器窗口
app.on("ready", function() {
//创建浏览器窗口
mainWindow = new BrowserWindow({ width: 800, height: 600 });
//载入布局文件
mainWindow.loadURL("file://" + __dirname + "/index.html");
//打开开发调试工具
//mainWindow.webContents.openDevTools();
//窗口关闭时触发
mainWindow.on("closed", function() {
mainWindow = null;
});
});
//当所有窗口都关闭的时候退出应用
app.on("window-all-closed", function() {
if (process.platform !== "darwin") {
app.quit();
}
});
app/index.html 是一个简单的 HTML 页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<style>
body {
color: #45828E;
background-color: #A5ECFA;
font-family: 'Helvetica Neue', 'Open Sans', Helvetica, Arial, sans-serif;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
最终演示效果:
2.使用 vue.js+marked.js 实现 markdown 编辑器
应用的目录结构如下:
- app/
- ├── package.json
- ├── main.js
- ├── index.html
- └── app/ - ├── css/ ├ markdown.css ├ app.css - ├── js/ ├ vue.js └ marked.min.js
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<link rel="stylesheet" type="text/css" href="app/css/markdown.css"/>
<link rel="stylesheet" type="text/css" href="app/css/app.css"/>
</head>
<body>
<div id="editor">
<textarea v-model="editorInput" debounce="300"></textarea>
<div v-html="editorInput | marked"></div>
</div>
<script src="app/lib/js/vue.js"></script>
<script src="app/lib/js/marked.min.js"></script>
<script type="text/javascript">
// 初始化
new Vue({
el: '#editor',
data: {
editorInput: '# hello'
},
filters: {
marked: marked
}
});
</script>
</body>
</html>
app.css
html,
body,
#editor {
margin: 0;
height: 100%;
font-family: "Helvetica Neue", Arial, sans-serif;
}
textarea,
#editor div {
display: inline-block;
width: 49%;
height: 100%;
vertical-align: top;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 0 20px;
}
textarea {
border: none;
border-right: 1px solid #ccc;
resize: none;
outline: none;
background-color: #f6f6f6;
font-size: 20px;
font-family: "Monaco", courier, monospace;
padding: 20px;
}
效果图:
写这些代码也许就一两个小时的事,写一篇大家好接受的文章需要几天的酝酿,如果文章对您有帮助请我喝杯咖啡吧!
