update: 完善开发模式

This commit is contained in:
jeasonnow
2023-07-14 22:14:01 +08:00
parent a597af490d
commit 3c7e7f6acc
9 changed files with 103 additions and 26 deletions

1
.gitignore vendored
View File

@@ -37,3 +37,4 @@ dist
src-tauri/.cargo/config
src-tauri/.cargo/
.next
src-tauri/.pake/

22
bin/helpers/merge.ts vendored
View File

@@ -5,6 +5,7 @@ import { npmDirectory } from '@/utils/dir';
import combineFiles from '@/utils/combine';
import logger from '@/options/logger';
import { PakeAppOptions, PlatformMap } from '@/types';
import { tauriConfigDirectory } from '../utils/dir';
export async function mergeConfig(url: string, options: PakeAppOptions, tauriConf: any) {
const {
@@ -200,20 +201,23 @@ export async function mergeConfig(url: string, options: PakeAppOptions, tauriCon
// Save config file.
const platformConfigPaths: PlatformMap = {
win32: 'src-tauri/tauri.windows.conf.json',
darwin: 'src-tauri/tauri.macos.conf.json',
linux: 'src-tauri/tauri.linux.conf.json',
win32: 'tauri.windows.conf.json',
darwin: 'tauri.macos.conf.json',
linux: 'tauri.linux.conf.json',
};
const configPath = path.join(npmDirectory, platformConfigPaths[platform]);
const configPath = path.join(tauriConfigDirectory, platformConfigPaths[platform]);
const bundleConf = { tauri: { bundle: tauriConf.tauri.bundle } };
await fsExtra.writeJson(configPath, bundleConf, { spaces: 4 });
const pakeConfigPath = path.join(npmDirectory, 'src-tauri/pake.json');
await fsExtra.writeJson(pakeConfigPath, tauriConf.pake, { spaces: 4 });
await fsExtra.outputJSON(configPath, bundleConf, { spaces: 4 });
const pakeConfigPath = path.join(tauriConfigDirectory, 'pake.json');
await fsExtra.outputJSON(pakeConfigPath, tauriConf.pake, { spaces: 4 });
let tauriConf2 = JSON.parse(JSON.stringify(tauriConf));
delete tauriConf2.pake;
delete tauriConf2.tauri.bundle;
const configJsonPath = path.join(npmDirectory, 'src-tauri/tauri.conf.json');
await fsExtra.writeJson(configJsonPath, tauriConf2, { spaces: 4 });
if (process.env.NODE_ENV === 'development') {
tauriConf2.tauri.bundle = bundleConf.tauri.bundle;
}
const configJsonPath = path.join(tauriConfigDirectory, 'tauri.conf.json');
await fsExtra.outputJSON(configJsonPath, tauriConf2, { spaces: 4 });
}

4
bin/utils/dir.ts vendored
View File

@@ -5,4 +5,6 @@ import { fileURLToPath } from 'url';
const currentModulePath = fileURLToPath(import.meta.url);
// Resolve the parent directory of the current module
export const npmDirectory = process.env.DEV === 'true' ? process.cwd() : path.join(path.dirname(currentModulePath), '..');
export const npmDirectory = path.join(path.dirname(currentModulePath), '..');
export const tauriConfigDirectory = process.env.NODE_ENV === 'development' ? path.join(npmDirectory, 'src-tauri', '.pake') : path.join(npmDirectory, 'src-tauri');

24
dist/cli.js vendored
View File

@@ -60,7 +60,7 @@ var scripts = {
analyze: "cd src-tauri && cargo bloat --release --crates",
tauri: "tauri",
cli: "rollup -c rollup.config.js --watch",
"cli:dev": "cross-env DEV=true tsx watch ./bin/dev.ts & npm run dev",
"cli:dev": "cross-env NODE_ENV=development rollup -c rollup.config.js -w",
"cli:build": "cross-env NODE_ENV=production rollup -c rollup.config.js",
prepublishOnly: "npm run cli:build"
};
@@ -88,6 +88,7 @@ var devDependencies = {
"@rollup/plugin-alias": "^4.0.2",
"@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-json": "^5.0.2",
"@rollup/plugin-replace": "^5.0.2",
"@rollup/plugin-terser": "^0.1.0",
"@types/fs-extra": "^9.0.13",
"@types/is-url": "^1.2.30",
@@ -362,7 +363,8 @@ const IS_LINUX = platform$1 === 'linux';
// Convert the current module URL to a file path
const currentModulePath = fileURLToPath(import.meta.url);
// Resolve the parent directory of the current module
const npmDirectory = process.env.DEV === 'true' ? process.cwd() : path.join(path.dirname(currentModulePath), '..');
const npmDirectory = path.join(path.dirname(currentModulePath), '..');
const tauriConfigDirectory = path.join(npmDirectory, 'src-tauri');
function shellExec(command) {
return new Promise((resolve, reject) => {
@@ -639,20 +641,20 @@ async function mergeConfig(url, options, tauriConf) {
}
// Save config file.
const platformConfigPaths = {
win32: 'src-tauri/tauri.windows.conf.json',
darwin: 'src-tauri/tauri.macos.conf.json',
linux: 'src-tauri/tauri.linux.conf.json',
win32: 'tauri.windows.conf.json',
darwin: 'tauri.macos.conf.json',
linux: 'tauri.linux.conf.json',
};
const configPath = path.join(npmDirectory, platformConfigPaths[platform]);
const configPath = path.join(tauriConfigDirectory, platformConfigPaths[platform]);
const bundleConf = { tauri: { bundle: tauriConf.tauri.bundle } };
await fsExtra.writeJson(configPath, bundleConf, { spaces: 4 });
const pakeConfigPath = path.join(npmDirectory, 'src-tauri/pake.json');
await fsExtra.writeJson(pakeConfigPath, tauriConf.pake, { spaces: 4 });
await fsExtra.outputJSON(configPath, bundleConf, { spaces: 4 });
const pakeConfigPath = path.join(tauriConfigDirectory, 'pake.json');
await fsExtra.outputJSON(pakeConfigPath, tauriConf.pake, { spaces: 4 });
let tauriConf2 = JSON.parse(JSON.stringify(tauriConf));
delete tauriConf2.pake;
delete tauriConf2.tauri.bundle;
const configJsonPath = path.join(npmDirectory, 'src-tauri/tauri.conf.json');
await fsExtra.writeJson(configJsonPath, tauriConf2, { spaces: 4 });
const configJsonPath = path.join(tauriConfigDirectory, 'tauri.conf.json');
await fsExtra.outputJSON(configJsonPath, tauriConf2, { spaces: 4 });
}
class BaseBuilder {

View File

@@ -40,7 +40,7 @@
"analyze": "cd src-tauri && cargo bloat --release --crates",
"tauri": "tauri",
"cli": "rollup -c rollup.config.js --watch",
"cli:dev": "cross-env DEV=true tsx watch ./bin/dev.ts & npm run dev",
"cli:dev": "cross-env NODE_ENV=development rollup -c rollup.config.js -w",
"cli:build": "cross-env NODE_ENV=production rollup -c rollup.config.js",
"prepublishOnly": "npm run cli:build"
},
@@ -68,6 +68,7 @@
"@rollup/plugin-alias": "^4.0.2",
"@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-json": "^5.0.2",
"@rollup/plugin-replace": "^5.0.2",
"@rollup/plugin-terser": "^0.1.0",
"@types/fs-extra": "^9.0.13",
"@types/is-url": "^1.2.30",

View File

@@ -0,0 +1,43 @@
import chalk from 'chalk';
import {spawn, exec} from 'child_process';
// just run in development mode
export default function pakeCliDevPlugin() {
return {
name: 'pake-cli-dev-plugin',
buildEnd() {
const command = 'node';
const cliCmdArgs = ['./dist/dev.js'];
const cliChildProcess = spawn(command, cliCmdArgs);
cliChildProcess.stdout.on('data', (data) => {
console.log(chalk.green(data.toString()));
});
cliChildProcess.stderr.on('data', (data) => {
console.error(chalk.yellow(data.toString()));
});
cliChildProcess.on('close', async (code) => {
console.log(chalk.yellow(`cli running end with code: ${code}`));
cliChildProcess.kill();
const dev = await exec('npm run tauri dev -- --config ./src-tauri/.pake/tauri.conf.json --features cli-build');
dev.stdout.on('data', (data) => {
console.error(chalk.green(data.toString()));
});
dev.stderr.on('data', (data) => {
console.error(chalk.yellow(data.toString()));
});
dev.on('close', () => {
dev.kill();
console.log(chalk.green('rebuild start'));
});
});
}
}
}

21
rollup.config.js vendored
View File

@@ -4,12 +4,23 @@ import typescript from 'rollup-plugin-typescript2';
import alias from '@rollup/plugin-alias';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import replace from '@rollup/plugin-replace';
import pakeCliDevPlugin from './plugins/pakeCliDevPlugin.js';
const isProduction = process.env.NODE_ENV === 'production';
const devPlugins = !isProduction ? [pakeCliDevPlugin()] : [];
export default {
input: 'bin/cli.ts',
input: isProduction ? 'bin/cli.ts' : 'bin/dev.ts',
output: {
file: 'dist/cli.js',
format: 'es'
file: isProduction ? 'dist/cli.js' : 'dist/dev.js',
format: 'es',
sourcemap: !isProduction,
},
watch: {
include: 'bin/**',
exclude: 'node_modules/**',
},
plugins: [
json(),
@@ -18,8 +29,12 @@ export default {
clean: true, // 清理缓存
}),
commonjs(),
replace({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
}),
alias({
entries: [{ find: '@', replacement: path.join(appRootPath.path, 'bin') }],
}),
...devPlugins,
],
};

View File

@@ -25,6 +25,8 @@ tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-works
cargo-bloat = "0.11.1"
[features]
# this feature is used for development builds from development cli
cli-build = []
# by default Tauri runs in production mode
# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
default = ["custom-protocol"]

View File

@@ -4,9 +4,16 @@ use std::path::PathBuf;
use tauri::{api, Config, Window};
pub fn get_pake_config() -> (PakeConfig, Config) {
#[cfg(feature = "cli-build")]
let pake_config: PakeConfig =
serde_json::from_str(include_str!("../.pake/pake.json")).expect("Failed to parse pake config");
#[cfg(not(feature = "cli-build"))]
let pake_config: PakeConfig =
serde_json::from_str(include_str!("../pake.json")).expect("Failed to parse pake config");
#[cfg(feature = "cli-build")]
let tauri_config: Config = serde_json::from_str(include_str!("../.pake/tauri.conf.json"))
.expect("Failed to parse tauri config");
#[cfg(not(feature = "cli-build"))]
let tauri_config: Config = serde_json::from_str(include_str!("../tauri.conf.json"))
.expect("Failed to parse tauri config");