YesPlayMusic/vue.config.js
pan93412 93ae57adbe
feat: switch to UNM (Rust) (#1536)
* refactor: use unm-rust-napi

* ci(build): install UNM dependencies for certain platforms

* feat: add the ability to configure UNM

* feat: add the UNM configuration in settings page

* refactor(jsconfig): jsx -> preserve

* fix(ci/build): use bash to get unm version

* chore(deps): upgrade UNM to 0.3.0-pre.0

* refactor(electron/ipcMain): update default sources

* fix(views/settings): remove duplicated config entry

* feat(settings): allow configuring QQ cookie

We also removed some duplicate entries in views/settings.vue.

* chore(deps): UNM -> 0.3.0-pre.1

* refactor: remove unused old UNM

* fix(utils/player): do not include rust-napi in client code

As we only imported the constant, I just expand it as the integer.

Co-authored-by: qier222 <qier222@outlook.com>
2022-04-28 01:02:41 +08:00

189 lines
4.8 KiB
JavaScript

const webpack = require('webpack');
const path = require('path');
function resolve(dir) {
return path.join(__dirname, dir);
}
module.exports = {
// 生产环境打包不输出 map
productionSourceMap: false,
devServer: {
disableHostCheck: true,
port: process.env.DEV_SERVER_PORT || 8080,
proxy: {
'^/api': {
target: 'http://localhost:3000',
changeOrigin: true,
pathRewrite: {
'^/api': '/',
},
},
},
},
pwa: {
name: 'YesPlayMusic',
iconPaths: {
favicon32: 'img/icons/favicon-32x32.png',
},
themeColor: '#ffffff00',
manifestOptions: {
background_color: '#335eea',
},
// workboxOptions: {
// swSrc: "dev/sw.js",
// },
},
pages: {
index: {
entry: 'src/main.js',
template: 'public/index.html',
filename: 'index.html',
title: 'YesPlayMusic',
chunks: ['main', 'chunk-vendors', 'chunk-common', 'index'],
},
},
chainWebpack(config) {
config.module.rules.delete('svg');
config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end();
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]',
})
.end();
config.module
.rule('napi')
.test(/\.node$/)
.use('node-loader')
.loader('node-loader')
.end();
// LimitChunkCountPlugin 可以通过合并块来对块进行后期处理。用以解决 chunk 包太多的问题
config.plugin('chunkPlugin').use(webpack.optimize.LimitChunkCountPlugin, [
{
maxChunks: 3,
minChunkSize: 10_000,
},
]);
},
// 添加插件的配置
pluginOptions: {
// electron-builder的配置文件
electronBuilder: {
nodeIntegration: true,
externals: ['@unblockneteasemusic/rust-napi'],
builderOptions: {
productName: 'YesPlayMusic',
copyright: 'Copyright © YesPlayMusic',
// compression: "maximum", // 机器好的可以打开,配置压缩,开启后会让 .AppImage 格式的客户端启动缓慢
asar: true,
publish: [
{
provider: 'github',
owner: 'qier222',
repo: 'YesPlayMusic',
vPrefixedTagName: true,
releaseType: 'draft',
},
],
directories: {
output: 'dist_electron',
},
mac: {
target: [
{
target: 'dmg',
arch: ['x64', 'arm64', 'universal'],
},
],
artifactName: '${productName}-${os}-${version}-${arch}.${ext}',
category: 'public.app-category.music',
darkModeSupport: true,
},
win: {
target: [
{
target: 'portable',
arch: ['x64'],
},
{
target: 'nsis',
arch: ['x64'],
},
],
publisherName: 'YesPlayMusic',
icon: 'build/icons/icon.ico',
publish: ['github'],
},
linux: {
target: [
{
target: 'AppImage',
arch: ['x64'],
},
{
target: 'tar.gz',
arch: ['x64', 'arm64'],
},
{
target: 'deb',
arch: ['x64', 'armv7l', 'arm64'],
},
{
target: 'rpm',
arch: ['x64'],
},
{
target: 'snap',
arch: ['x64'],
},
{
target: 'pacman',
arch: ['x64'],
},
],
category: 'Music',
icon: './build/icon.icns',
},
dmg: {
icon: 'build/icons/icon.icns',
},
nsis: {
oneClick: true,
perMachine: true,
deleteAppDataOnUninstall: true,
},
},
// 主线程的配置文件
chainWebpackMainProcess: config => {
config.plugin('define').tap(args => {
args[0]['IS_ELECTRON'] = true;
return args;
});
config.resolve.alias.set(
'jsbi',
path.join(__dirname, 'node_modules/jsbi/dist/jsbi-cjs.js')
);
},
// 渲染线程的配置文件
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',
// mainProcessArgs: []
},
},
};