抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

简单说明

想用js开发桌面现在有两个框架可以用 Electron 另外一个是 nwjs.
但感觉还是用 Electron比较好,因为现在一些流行的软件是那这个弄的,比如说我现在用的 Atom ,VSCode 这两个软件都非常好用,而且漂亮.
另外还有个原因是,他有中文文档.这样实在是方便太多了

编写

这里主要编写个 Electron 启动配置文件.是 package.json 里的 main 字段的文件.
注意:如果 main 字段没有在 package.json 声明,Electron会优先加载 index.js。
剩下的就是编写自己的程序了就行了.

贴两个配置文件样本.
这是官方的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const { app, BrowserWindow } = require('electron')
const path = require('path');
const url = require('url')

// 保持一个对于 window 对象的全局引用,如果你不这样做,
// 当 JavaScript 对象被垃圾回收, window 会被自动地关闭
let win

function createWindow() {
// 创建浏览器窗口。
win = new BrowserWindow({ width: 800, height: 600 })

// 加载应用的 index.html。
win.loadURL(url.format({
pathname: path.join(__dirname, 'dist/index_prod.html'),
protocol: 'file:',
slashes: true
}))
//win.loadURL('http://localhost:8080')

// 打开开发者工具。
win.webContents.openDevTools();

// 当 window 被关闭,这个事件会被触发。
win.on('closed', () => {
// 取消引用 window 对象,如果你的应用支持多窗口的话,
// 通常会把多个 window 对象存放在一个数组里面,
// 与此同时,你应该删除相应的元素。
win = null
})
}

// Electron 会在初始化后并准备
// 创建浏览器窗口时,调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
app.on('ready', createWindow)

// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
// 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
// 否则绝大部分应用及其菜单栏会保持激活。
if (process.platform !== 'darwin') {
app.quit()
}
})

app.on('activate', () => {
// 在这文件,你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件,然后用 require 导入。
if (win === null) {
createWindow()
}
})

// 在这文件,你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件,然后用 require 导入。

这就是Promise的作用了,简单来讲,就是能把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function runAsync(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
//执行成功后 执行这个回调
resolve('随便什么数据');
//reject是失败
}, 2000);
});
return p;
}
runAsync().then(function(data){
console.log(data+'-------');
//后面可以用传过来的数据做些其他操作
//......
});

功能相同

1
2
3
4
5
6
7
8
9
10
function runAsync(callback){
setTimeout(function(){
console.log('执行完成');
callback('随便什么数据');
}, 2000);
}

runAsync(function(data){
console.log(data);
});

优点:

效果也是一样的,还费劲用Promise干嘛。那么问题来了,有多层回调该怎么办?如果callback也是一个异步操作,而且执行完后也需要有相应的回调函数,该怎么办呢?总不能再定义一个callback2,然后给callback传进去吧。而Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。

CLI 方式会比Node.js Api方式简单很多.Node.js Api方式 如果配置热启动 还需要配置 webpack.HotModuleReplacementPlugin 而且有时还得安装 webpack-hot-middleware 额外的插件 还有需要特别注意的地方是 publicPath必填使用Node.js Api方式 结果还是不能自动更新.因为这个方法实在问题太多,最后还是使...

这个小插件主要解决 windows 下 无法设置 NODE_ENV=development 这个东西. 因为程序可以根据 NODE的环境变量,做出不同选择. 这个在 linux 下是可以设置的,但在 windows 下不行 安装 1npm install across-env --save-dev 使用在package.json里,需要设置环境的地方加上这句就好了 1cross-env N...

这是篇转发,因为原文写的实在是太明白了. http://cnodejs.org/topic/507285c101d0b80148f7c538 开始学习child_process模块的时候以为spawn可以直接运行命令, 后来发现这是一个小陷阱就拿出来和大家分享一下. 先说下我碰到的情况由于在windos下写的所以根据docs上的例子我就写出了这么一句代码:”require(“child_...