mirror of
https://github.com/qier222/YesPlayMusic.git
synced 2024-11-22 11:42:34 +08:00
feat: electron supported
This commit is contained in:
parent
0d5738d60a
commit
e60caf9018
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -24,3 +24,6 @@ pnpm-debug.log*
|
||||||
*.sw?
|
*.sw?
|
||||||
|
|
||||||
.vercel
|
.vercel
|
||||||
|
|
||||||
|
#Electron-builder output
|
||||||
|
/dist_electron
|
3
.npmrc
Normal file
3
.npmrc
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# 如果发现 npm / yarn 安装太慢,可以解除注释
|
||||||
|
# registry=https://registry.npm.taobao.org/
|
||||||
|
# ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron
|
30
package.json
30
package.json
|
@ -1,18 +1,18 @@
|
||||||
{
|
{
|
||||||
"name": "YesPlayMusic",
|
"name": "yes-play-music",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "vue-cli-service build",
|
"build": "vue-cli-service build",
|
||||||
"lint": "vue-cli-service lint",
|
"lint": "vue-cli-service lint",
|
||||||
|
"electron:build": "vue-cli-service electron:build",
|
||||||
|
"electron:serve": "vue-cli-service electron:serve",
|
||||||
|
"postinstall": "electron-builder install-app-deps",
|
||||||
|
"postuninstall": "electron-builder install-app-deps",
|
||||||
"prettier": "npx prettier --write ./src"
|
"prettier": "npx prettier --write ./src"
|
||||||
},
|
},
|
||||||
"husky": {
|
"main": "background.js",
|
||||||
"hooks": {
|
|
||||||
"pre-commit": "npm run prettier"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sentry/browser": "^5.27.0",
|
"@sentry/browser": "^5.27.0",
|
||||||
"@sentry/integrations": "^5.27.0",
|
"@sentry/integrations": "^5.27.0",
|
||||||
|
@ -21,6 +21,9 @@
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"crypto-js": "^4.0.0",
|
"crypto-js": "^4.0.0",
|
||||||
"dayjs": "^1.8.36",
|
"dayjs": "^1.8.36",
|
||||||
|
"electron-is-dev": "^1.2.0",
|
||||||
|
"electron-log": "^4.2.4",
|
||||||
|
"electron-updater": "^4.3.5",
|
||||||
"howler": "^2.2.0",
|
"howler": "^2.2.0",
|
||||||
"js-cookie": "^2.2.1",
|
"js-cookie": "^2.2.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
|
@ -30,11 +33,13 @@
|
||||||
"svg-sprite-loader": "^5.0.0",
|
"svg-sprite-loader": "^5.0.0",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
"vue-analytics": "^5.22.1",
|
"vue-analytics": "^5.22.1",
|
||||||
|
"vue-electron": "^1.0.6",
|
||||||
"vue-global-events": "^1.2.1",
|
"vue-global-events": "^1.2.1",
|
||||||
"vue-i18n": "^8.22.0",
|
"vue-i18n": "^8.22.0",
|
||||||
"vue-router": "^3.4.3",
|
"vue-router": "^3.4.3",
|
||||||
"vue-slider-component": "^3.2.5",
|
"vue-slider-component": "^3.2.5",
|
||||||
"vuex": "^3.4.0"
|
"vuex": "^3.4.0",
|
||||||
|
"vuex-electron": "^1.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vue/cli-plugin-babel": "~4.5.0",
|
"@vue/cli-plugin-babel": "~4.5.0",
|
||||||
|
@ -43,11 +48,15 @@
|
||||||
"@vue/cli-plugin-vuex": "~4.5.0",
|
"@vue/cli-plugin-vuex": "~4.5.0",
|
||||||
"@vue/cli-service": "~4.5.0",
|
"@vue/cli-service": "~4.5.0",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
|
"electron": "^10.1.4",
|
||||||
|
"electron-debug": "^3.1.0",
|
||||||
|
"electron-devtools-installer": "^3.1.1",
|
||||||
"eslint": "^6.7.2",
|
"eslint": "^6.7.2",
|
||||||
"eslint-plugin-vue": "^6.2.2",
|
"eslint-plugin-vue": "^6.2.2",
|
||||||
"husky": "^4.3.0",
|
"husky": "^4.3.0",
|
||||||
"sass": "^1.26.11",
|
"sass": "^1.26.11",
|
||||||
"sass-loader": "^10.0.2",
|
"sass-loader": "^10.0.2",
|
||||||
|
"vue-cli-plugin-electron-builder": "~2.0.0-rc.4",
|
||||||
"vue-template-compiler": "^2.6.11"
|
"vue-template-compiler": "^2.6.11"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
|
@ -68,5 +77,10 @@
|
||||||
"> 1%",
|
"> 1%",
|
||||||
"last 2 versions",
|
"last 2 versions",
|
||||||
"not dead"
|
"not dead"
|
||||||
]
|
],
|
||||||
|
"husky": {
|
||||||
|
"hooks": {
|
||||||
|
"pre-commit": "npm run prettier"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
89
src/background.js
Normal file
89
src/background.js
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
import { app, protocol, BrowserWindow } from 'electron'
|
||||||
|
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
|
||||||
|
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
|
||||||
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
||||||
|
|
||||||
|
// Keep a global reference of the window object, if you don't, the window will
|
||||||
|
// be closed automatically when the JavaScript object is garbage collected.
|
||||||
|
let win
|
||||||
|
|
||||||
|
// Scheme must be registered before the app is ready
|
||||||
|
protocol.registerSchemesAsPrivileged([
|
||||||
|
{ scheme: 'app', privileges: { secure: true, standard: true } }
|
||||||
|
])
|
||||||
|
|
||||||
|
function createWindow() {
|
||||||
|
// Create the browser window.
|
||||||
|
win = new BrowserWindow({
|
||||||
|
width: 1920,
|
||||||
|
height: 768,
|
||||||
|
webPreferences: {
|
||||||
|
// Use pluginOptions.nodeIntegration, leave this alone
|
||||||
|
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
|
||||||
|
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
||||||
|
// Load the url of the dev server if in development mode
|
||||||
|
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
|
||||||
|
if (!process.env.IS_TEST) win.webContents.openDevTools()
|
||||||
|
} else {
|
||||||
|
createProtocol('app')
|
||||||
|
// Load the index.html when not in development
|
||||||
|
win.loadURL('app://./index.html')
|
||||||
|
}
|
||||||
|
|
||||||
|
win.on('closed', () => {
|
||||||
|
win = null
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quit when all windows are closed.
|
||||||
|
app.on('window-all-closed', () => {
|
||||||
|
// On macOS it is common for applications and their menu bar
|
||||||
|
// to stay active until the user quits explicitly with Cmd + Q
|
||||||
|
if (process.platform !== 'darwin') {
|
||||||
|
app.quit()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.on('activate', () => {
|
||||||
|
// On macOS it's common to re-create a window in the app when the
|
||||||
|
// dock icon is clicked and there are no other windows open.
|
||||||
|
if (win === null) {
|
||||||
|
createWindow()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// This method will be called when Electron has finished
|
||||||
|
// initialization and is ready to create browser windows.
|
||||||
|
// Some APIs can only be used after this event occurs.
|
||||||
|
app.on('ready', async () => {
|
||||||
|
if (isDevelopment && !process.env.IS_TEST) {
|
||||||
|
// Install Vue Devtools
|
||||||
|
try {
|
||||||
|
await installExtension(VUEJS_DEVTOOLS)
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Vue Devtools failed to install:', e.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
createWindow()
|
||||||
|
})
|
||||||
|
|
||||||
|
// Exit cleanly on request from parent process in development mode.
|
||||||
|
if (isDevelopment) {
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
process.on('message', (data) => {
|
||||||
|
if (data === 'graceful-exit') {
|
||||||
|
app.quit()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
process.on('SIGTERM', () => {
|
||||||
|
app.quit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ module.exports = {
|
||||||
template: "public/index.html",
|
template: "public/index.html",
|
||||||
filename: "index.html",
|
filename: "index.html",
|
||||||
title: "YesPlayMusic",
|
title: "YesPlayMusic",
|
||||||
chunks: ["chunk-vendors", "chunk-common", "index"],
|
chunks: ["main", "chunk-vendors", "chunk-common", "index"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
chainWebpack(config) {
|
chainWebpack(config) {
|
||||||
|
@ -45,4 +45,73 @@ module.exports = {
|
||||||
})
|
})
|
||||||
.end();
|
.end();
|
||||||
},
|
},
|
||||||
|
// 添加插件的配置
|
||||||
|
pluginOptions: {
|
||||||
|
// electron-builder的配置文件
|
||||||
|
electronBuilder: {
|
||||||
|
builderOptions: {
|
||||||
|
// files: [
|
||||||
|
// {
|
||||||
|
// 'filter': ['**/*']
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
// extraFiles: ['./extensions/'],
|
||||||
|
// 应用名称
|
||||||
|
productName: 'Yes Play Music',
|
||||||
|
// 版权
|
||||||
|
copyright: 'Copyright © YesPlayMusic',
|
||||||
|
compression: "maximum",
|
||||||
|
// 是否打包加密
|
||||||
|
asar: true,
|
||||||
|
// // 项目打包生成的文件目录
|
||||||
|
// directories: {
|
||||||
|
// output: 'build'
|
||||||
|
// },
|
||||||
|
// window的icon头标
|
||||||
|
win: {
|
||||||
|
icon: 'public/favicon.ico'
|
||||||
|
},
|
||||||
|
// 是否静默安装
|
||||||
|
nsis: {
|
||||||
|
oneClick: false,
|
||||||
|
allowToChangeInstallationDirectory: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// chainWebpackMainProcess: config => {
|
||||||
|
// config.module
|
||||||
|
// .rule('babel')
|
||||||
|
// .test(/\*.js$/)
|
||||||
|
// .use('babel')
|
||||||
|
// .loader('babel-loader')
|
||||||
|
// .options({
|
||||||
|
// presets: [['@babel/preset-env', '@vue/cli-plugin-babel/preset', { modules: false }]],
|
||||||
|
// plugins: ['@babel/plugin-proposal-class-properties']
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// 渲染线程的配置文件
|
||||||
|
// chainWebpackRendererProcess: config => {
|
||||||
|
// // 渲染线程的一些其他配置
|
||||||
|
// // Chain webpack config for electron renderer process only
|
||||||
|
// // The following example will set IS_ELECTRON to true in your app
|
||||||
|
// config.plugin('define').tap((args) => {
|
||||||
|
// args[0]['IS_ELECTRON'] = true
|
||||||
|
// return args
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// 主入口文件
|
||||||
|
// mainProcessFile: 'src/main.js',
|
||||||
|
// mainProcessWatch: [],
|
||||||
|
// mainProcessArgs: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 打包时不生成.map文件,减少体积,加快速度如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
|
||||||
|
productionSourceMap: false,
|
||||||
|
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
|
||||||
|
assetsDir: 'src/renderer/static',
|
||||||
|
// 跨域配置
|
||||||
|
devServer: {
|
||||||
|
disableHostCheck: true
|
||||||
|
},
|
||||||
|
// css 样式
|
||||||
|
css: {}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user