2、集成Vue

使用步骤

搭建项目

1、安装VueCli,搭建Vue项目

找个喜欢的目录,执行以下命令,创建vue项目:

(这里把项目名称定为electron-vue-demo)

vue create electron-vue-demo

会出现以下选项(如果熟悉此步骤可跳过本节内容):

Vue CLI v3.8.4
? Please pick a preset: (Use arrow keys)
  default (babel, eslint) 
> Manually select features 

选择“Manually select features” (自定义安装)。

? Check the features needed for your project: (Press <space> to select, <a> to t
oggle all, <i> to invert selection)
❯◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◉ Router
 ◉ Vuex
 ◉ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing

这里选择了常用的模块,请根据实际需求进行选择。

? Use history mode for router? (Requires proper server setup for index fallback 
in production) (Y/n)  n

如果选择了router,这里会询问是否使用history模式。

vue-router 默认使用hash模式(即通过url#hash来跳转页面),使用URL的hash来模拟一个完整的 URL,当URL改变时,页面不会重新加载。 如果使用history,URL就像正常的url,例如http://yoursite.com/user/id,比较好看。但是还需要后台配置支持。

这里我们选择“n”。

? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported 
by default): (Use arrow keys)
  Sass/SCSS (with dart-sass) 
  Sass/SCSS (with node-sass) 
  Less 
❯ Stylus 

选择CSS预处理模块,这里我们使用“Stylus”。

? Pick a linter / formatter config: (Use arrow keys)
  ESLint with error prevention only 
  ESLint + Airbnb config 
❯ ESLint + Standard config 
  ESLint + Prettier 

选择ESLint代码格式检查工具的配置,选择“ESLint + Standard config”,标准配置。

? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i
> to invert selection)
❯◉ Lint on save
 ◯ Lint and fix on commit

Line on save表示在保存代码的时候,进行格式检查。

Lint and fix on commit表示在git commit的时候自动纠正格式。

这里只选择“Lint on save”

? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? 
  In dedicated config files 
❯ In package.json 

这里问把 babel, postcss, eslint 这些配置文件放哪?

In dedicated config files 表示独立文件

In package.json 表示放在package.json里

这里选择“In package.json”。

? Save this as a preset for future projects? (y/N) N

是否为以后的项目保留这些设置?选择“N”。

然后耐心等待项目安装完成。

2、自动安装Electron

由于源在国外,安装会特别慢,可以在项目根目录新建文件.npmrc,写入如下源

electron_mirror = https://registry.npmmirror.com/-/binary/electron/

进入项目根目录,安装

vue add electron-builder

安装过程选择electron版本,选最高的就行

编译启动

项目根目录下执行命令

npm run electron:serve

启动会有点慢,需要在src/background.js文件中,注释掉如下代码

// 去掉安装VUEJS3_DEVTOOLS
// if (isDevelopment && !process.env.IS_TEST) {
//   // Install Vue Devtools
//   try {
//     await installExtension(VUEJS3_DEVTOOLS)
//   } catch (e) {
//     console.error('Vue Devtools failed to install:', e.toString())
//   }
// }

配置项目

1、配置vue

在项目根目录下创建vue.config.js,粘贴以下代码:

const path = require('path')

function resolve (dir) {
    return path.join(__dirname, dir);
}

module.exports = {
    publicPath: './',
    devServer: {
        // can be overwritten by process.env.HOST
        host: '0.0.0.0',  
        port: 8080
    },
    chainWebpack: config => {
        config.resolve.alias
            .set('@', resolve('src'))
            .set('src', resolve('src'))
            .set('common', resolve('src/common'))
            .set('components', resolve('src/components'));
    }
};

devServer 用于设置开发环境的服务,这里表示在本地8080端口启动web服务。

chainWebpack我们给项目目录起了“别名(alias)”,在代码中,我们可以直接用“别名”访问资源,省去了每次输入完整相对路径的麻烦。

◉ 在js代码中可直接使用别名,例如:
@/common/js/xxx.js 等价于 src/common/js/xxx.js
common/js/xxx.js 等价于 src/common/js/xxx.js
◉ 在css或者html中使用别名,需要在别名前加“~”,例如:
@import "~common/stylus/font.styl";

2、配置主进程文件background.js

取消跨域限制
function createWindow () {
    // Create the browser window.
    win = new BrowserWindow({
        width: 1200,
        height: 620,
        webPreferences: {
            //取消跨域限制
            webSecurity: false,
            nodeIntegration: true
        }
    })
设置APP窗口图标
windows: app.ico 最小尺寸:256x256
macOS: app.png或app.icns 最小尺寸:512x512

将图标放在public文件夹下,添加图标,${__static}代表public文件夹

function createWindow () {
    // Create the browser window.
    win = new BrowserWindow({
        width: 1200,
        height: 620,
        webPreferences: {
            nodeIntegration: true
        },
        icon: `${__static}/app.ico`
    })
}
修改窗口名称

修改public/index.html文件的tittle就可以了

打包应用

修改vue.config.js,切记!!!项目不要放在中文路径上,不然打包会报错

const {defineConfig} = require('@vue/cli-service')
const path = require('path')

function resolve(dir) {
    return path.join(__dirname, dir);
}

module.exports = defineConfig({
    transpileDependencies: true,
    publicPath: './',
    devServer: {
        // can be overwritten by process.env.HOST
        host: '0.0.0.0',
        port: 8080
    },
    chainWebpack: config => {
        config.resolve.alias
            .set('@', resolve('src'))
            .set('src', resolve('src'))
            .set('common', resolve('src/common'))
            .set('components', resolve('src/components'));
    },
    pluginOptions: {
        electronBuilder: {
            preload: 'src/preload.js',
            builderOptions: {
                "productName": "eternal",//项目名 这也是生成的exe文件的前缀名
                "appId": "top.ygang.eternal",//包名
                "copyright": "GradyYoung BY ygang.top",//版权信息
                "directories": {
                    "output": "dist_electron", //输出文件夹
                    "buildResources":"build"
                },
                "extraFiles": [//要拷贝到安装目录的文件或目录
                    './src/assets',
                    {
                        "from": "src/assets",
                        "to": "assets"
                    }
                ],
                "nsis": {	//nsis相关配置,打包方式为nsis时生效
                    "oneClick": false,// 是否一键安装
                    "allowElevation": true,// 允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序。
                    "allowToChangeInstallationDirectory": true,// 允许修改安装目录
                    "installerIcon": "public/favicon.ico",// 安装图标
                    "uninstallerIcon": "public/favicon.ico",//卸载图标
                    "installerHeaderIcon": "public/favicon.ico",// 安装时头部图标
                    "createDesktopShortcut": true,// 创建桌面图标
                    "createStartMenuShortcut": true,// 创建开始菜单图标
                    "shortcutName": "eternal",// 图标名称
                    "displayLanguageSelector": true //安装时语言选择
                },
                "publish": [
                    {
                        "provider": "generic",// 服务器提供商,也可以是GitHub等等
                        "url": "http://xxxxx/"// 服务器地址
                    }
                ],
                "win": {
                    //must be at least 256x256
                    "icon": "public/favicon.ico",
                    "target": [
                        {
                            "target": "nsis",//使用nsis打成安装包,"portable"打包成免安装版
                            "arch": [
                                "ia32",//32位
                                "x64"//64位
                            ]
                        }
                    ],
                    "legalTrademarks": "www.ygang.top" //公司或商标名称
                },
                "mac": {
                    "icon": "public/favicon.ico"
                },
                "linux": {
                    "icon": "public/favicon.ico"
                }
            }
        }
    }
})

执行命令进行打包

npm run electron:build

添加License

在上面配置中buildResources的目录下创建license.txt文件即可,如果displayLanguageSelectortrue的话,创建license_en.txtlicense_zh_CN.txt,使用字符集编码带有BOM的UTF-8兼容win、mac