electron-vue 打包不同平台的安装包(win32、win64、mac)

在package.json里面加入以下代码

 

 "scripts": {
    "build": "node .electron-vue/build.js && electron-builder",
    "win32": "node .electron-vue/build.js && electron-builder --platform=win32  --arch=ia32",
    "mac": "node .electron-vue/build.js && electron-builder --platform=mac ",
    "build:dir": "node .electron-vue/build.js && electron-builder --dir",
    "build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js",
    "build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js",
    "dev": "node .electron-vue/dev-runner.js",
    "pack": "npm run pack:main && npm run pack:renderer",
    "pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
    "pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
    "postinstall": ""
  },

然后执行npm run win32  或者 npm run mac   需要注意的是mac包必须在mac环境下执行

最简单快速理解async、await、promise

ES7带来了async和await,让js的异步编程更加方便。

1、async 做一件什么事情

一句话概括: 带 async 关键字的函数,它使得你的函数的返回值必定是 promise 对象

也就是

如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装

如果async关键字函数显式地返回promise,那就以你返回的promise为准

这是一个简单的例子,可以看到 async 关键字函数和普通函数的返回值的区别

async function fn1(){
    return 1
}
function fn2(){
    return 1
}
console.log(fn1())
console.log(fn2())

fn1().then(function(res){
    console.log(res)
})
// Promise { 1 }
// 1
// 1

所以你看,async 函数也没啥了不起的,以后看到带有 async 关键字的函数也不用慌张,你就想它无非就是把return值包装了一下,其他就跟普通函数一样。

关于async关键字还有那些要注意的?

在语义上要理解,async表示函数内部有异步操作
另外注意,一般 await 关键字要在 async 关键字函数的内部,await 写在外面会报错。

2.await 在等什么?

一句话概括: await等的是右侧「表达式」的结果

也就是说,

右侧如果是函数,那么函数的return值就是「表达式的结果」

右侧如果是一个 ‘hello’ 或者什么值,那表达式的结果就是 ‘hello’

3.await 等到之后,做了一件什么事情?

那么右侧表达式的结果,就是await要等的东西。

等到之后,对于await来说,分2个情况

  • 不是promise对象
  • 是promise对象

如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果

如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

4.为什么使用Promise

通过Promise,可以将一步操作以同步操作的流程表达出来,可以避免层层嵌套的回调函数(回调地域),并且Promise提供了统一的接口,使得控制异步操作更加容易

function sleep(second){
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            let res=Math.random()
            if(res<0.5){
                resolve('<0.5')
            }else{
                reject('>0.5')
            }
        },second);
    })
}
function test(){
    return 'test';
}

function test2(){
    return 'test2';
}
async function open(){
    await sleep(2000).then((res)=>{
        console.log(res)
    }).catch((e)=>{
        console.log(e)
    })
    console.log('open')
    let res=await test()
    console.log(res)
}

async function open2(){
    let res=await test2()
    console.log(res)
}

open()
console.log('外面的')
open2()

//输入顺序
// 外面的
// test2
// <0.5
// open
// test


 

 

nodejs程序配置成windows-server服务,实现开机自启动,安装为windows服务

使用模块

node-windows

代码

在项目中下载node-windows模块 :  npm install node-windows –save

在项目根目录创建nw.js文件,代码如下

let path = require('path');
 
let Service = require('node-windows').Service;
 
// Create a new service object
let svc = new Service({
  name:'node windows server test', //名称
  description: 'The socket.io nodejs server test ',//描述
  script:  path.resolve('./app.js'),//node执行入口
  nodeOptions: [
    '--harmony',
    '--max_old_space_size=4096'
  ]
});
 
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});
 
svc.install();

安装服务

然后执行 node nw.js (注意修改之后,再次执行,需要删除在当前目录生成的daemon)

安装windows服务,安装过程中会有一些阻止,全部选择允许。

最终在服务中可以看到安装的服务。

删除服务命令:用管理员身份打开命令提示符窗口,执行 sc delete serviceName

serviceName,可以在服务中右键打开属性中查看

删除服务

如果我们要删除该服务,执行的命令式 sc delete node_lol.exe

然后会提示:[SC] DeleteService 成功

Express 应用生成器的使用(express-generator)

通过应用生成器工具 express 可以快速创建一个应用的骨架。

通过如下命令安装:

$ npm install express-generator -g

当前你也可以不全局指定来安装 $ npm install express-generator

这样安装的话,你必须指定 node_modules/.bin/express 来执行命令

-h 选项可以列出所有可用的命令行选项:

$ express -h

  Usage: express [options] [dir]

  Options:

    -h, --help          output usage information
    -V, --version       output the version number
    -e, --ejs           add ejs engine support (defaults to jade)
        --hbs           add handlebars engine support
    -H, --hogan         add hogan.js engine support
    -c, --css <engine>  add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
        --git           add .gitignore
    -f, --force         force on non-empty directory

例如,下面的示例就是在当前工作目录下创建一个命名为 myapp 的应用。

$ express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
   create : myapp/public
   create : myapp/public/javascripts
   create : myapp/public/images
   create : myapp/routes
   create : myapp/routes/index.js
   create : myapp/routes/users.js
   create : myapp/public/stylesheets
   create : myapp/public/stylesheets/style.css
   create : myapp/views
   create : myapp/views/index.jade
   create : myapp/views/layout.jade
   create : myapp/views/error.jade
   create : myapp/bin
   create : myapp/bin/www

然后安装所有依赖包:

$ cd myapp 
$ npm install

接着执行start

$ npm start

然后在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。i

通过 Express 应用生成器创建的应用一般都有如下目录结构:

.
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.jade
    ├── index.jade
    └── layout.jade

7 directories, 9 files