Merge pull request #62 from northword:refactor-start-script

Auto update `<profile>/extensions/${addonID}` before start Zotero
This commit is contained in:
windingwind 2023-07-12 23:46:15 +08:00 committed by GitHub
commit 932d491d9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 77 additions and 41 deletions

View File

@ -189,30 +189,28 @@ npm run release
3. Copy zotero command line config file. Modify the commands that starts your installation of the beta Zotero. 3. Copy zotero command line config file. Modify the commands that starts your installation of the beta Zotero.
> (Optional) Do this only once: Start the beta Zotero with `/path/to/zotero -p`. Create a new profile and use it as your development profile. > (Optional) Do this only once: Start the beta Zotero with `/path/to/zotero -p`. Create a new profile and use it as your development profile.
> Use `/path/to/zotero -p {profile_name}` to specify which profile to run with. > Put the path of the profile into the `profilePath` in `zotero-cmd.json` to specify which profile to use.
```sh ```sh
cp ./scripts/zotero-cmd-default.json ./scripts/zotero-cmd.json cp ./scripts/zotero-cmd-default.json ./scripts/zotero-cmd.json
vim ./scripts/zotero-cmd.json vim ./scripts/zotero-cmd.json
``` ```
4. Setup plugin development environment following this [link](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment). 4. Build plugin and restart Zotero with `npm run restart`.
5. Build plugin and restart Zotero with `npm run restart`. 5. Launch Firefox 102 (Zotero 7)
6. Launch Firefox 102 (Zotero 7) 6. In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging
7. In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging
> Enter `about:debugging#/setup` in FF 102. > Enter `about:debugging#/setup` in FF 102.
8. In Zotero, go to setting, advanced, config editor, look up "debugging" and click on "allow remote debugging". 7. In Zotero, go to setting, advanced, config editor, look up "debugging" and click on "allow remote debugging".
9. Connect to Zotero in Firefox. In FF 102, enter `localhost:6100` in the bottom input of remote-debugging page and click `add`. 8. Connect to Zotero in Firefox. In FF 102, enter `localhost:6100` in the bottom input of remote-debugging page and click `add`.
10. Click `connect` in the leftside-bar of Firefox remote-debugging page. 9. Click `connect` in the leftside-bar of Firefox remote-debugging page.
11. Click "Inspect Main Process" 10. Click "Inspect Main Process"
### Auto Hot Reload ### Auto Hot Reload

View File

@ -54,7 +54,6 @@
"esbuild": "^0.18.1", "esbuild": "^0.18.1",
"eslint": "^8.40.0", "eslint": "^8.40.0",
"eslint-config-prettier": "^8.8.0", "eslint-config-prettier": "^8.8.0",
"minimist": "^1.2.8",
"prettier": "2.8.8", "prettier": "2.8.8",
"release-it": "^15.10.3", "release-it": "^15.10.3",
"replace-in-file": "^6.3.5", "replace-in-file": "^6.3.5",

View File

@ -1,20 +1,13 @@
import { exit, argv } from "process"; import { exit } from "process";
import minimist from "minimist";
import { execSync } from "child_process"; import { execSync } from "child_process";
import details from "../package.json" assert { type: "json" }; import details from "../package.json" assert { type: "json" };
const { addonID, addonName } = details.config;
const version = details.version;
import cmd from "./zotero-cmd.json" assert { type: "json" }; import cmd from "./zotero-cmd.json" assert { type: "json" };
const { exec } = cmd;
// Run node reload.js -h for help const { addonID, addonName } = details.config;
const args = minimist(argv.slice(2)); const { version } = details;
const { zoteroBinPath, profilePath } = cmd.exec;
const zoteroPath = exec[args.zotero || args.z || Object.keys(exec)[0]]; const startZotero = `${zoteroBinPath} --debugger --purgecaches -profile ${profilePath}`;
const profile = args.profile || args.p;
const startZotero = `${zoteroPath} --debugger --purgecaches ${
profile ? `-p ${profile}` : ""
}`;
const script = ` const script = `
(async () => { (async () => {

View File

@ -1,28 +1,62 @@
import process from "process";
import { execSync } from "child_process"; import { execSync } from "child_process";
import { exit } from "process"; import { exit } from "process";
import minimist from "minimist"; import { existsSync, writeFileSync, readFileSync } from "fs";
import { join, resolve } from "path";
import details from "../package.json" assert { type: "json" };
import cmd from "./zotero-cmd.json" assert { type: "json" }; import cmd from "./zotero-cmd.json" assert { type: "json" };
const { exec } = cmd;
// Run node start.js -h for help const { addonID } = details.config;
const args = minimist(process.argv.slice(2)); const { zoteroBinPath, profilePath, dataDir } = cmd.exec;
if (args.help || args.h) { if (!existsSync(zoteroBinPath)) {
console.log("Start Zotero Args:"); throw new Error("Zotero bin do no exist.");
console.log(
"--zotero(-z): Zotero exec key in zotero-cmd.json. Default the first one."
);
console.log("--profile(-p): Zotero profile name.");
exit(0);
} }
const zoteroPath = exec[args.zotero || args.z || Object.keys(exec)[0]]; if (existsSync(profilePath)) {
const profile = args.profile || args.p; const addonProxyFilePath = join(profilePath, `extensions/${addonID}`);
const buildPath = resolve("build/addon");
const startZotero = `${zoteroPath} --debugger --purgecaches ${ function writeAddonProxyFile() {
profile ? `-p ${profile}` : "" writeFileSync(addonProxyFilePath, buildPath);
}`; console.log(
`[info] Addon proxy file has been updated. \n
File path: ${addonProxyFilePath} \n
Addon path: ${buildPath} \n`
);
}
if (existsSync(addonProxyFilePath)) {
if (readFileSync(addonProxyFilePath, "utf-8") !== buildPath) {
writeAddonProxyFile();
}
} else {
writeAddonProxyFile();
}
const prefsPath = join(profilePath, "prefs.js");
if (existsSync(prefsPath)) {
const PrefsLines = readFileSync(prefsPath, "utf-8").split("\n");
const filteredLines = PrefsLines.map((line) => {
if (
line.includes("extensions.lastAppBuildId") ||
line.includes("extensions.lastAppVersion")
) {
return;
}
if (line.includes("extensions.zotero.dataDir") && dataDir !== "") {
return `user_pref("extensions.zotero.dataDir", "${dataDir}");`;
}
return line;
});
const updatedPrefs = filteredLines.join("\n");
writeFileSync(prefsPath, updatedPrefs, "utf-8");
console.log("[info] The <profile>/prefs.js has been modified.");
}
} else {
throw new Error("The given Zotero profile does not exist.");
}
const startZotero = `"${zoteroBinPath}" --debugger --purgecaches -profile ${profilePath}`;
execSync(startZotero); execSync(startZotero);
exit(0); exit(0);

View File

@ -3,6 +3,18 @@
"killZoteroWindows": "taskkill /f /im zotero.exe", "killZoteroWindows": "taskkill /f /im zotero.exe",
"killZoteroUnix": "kill -9 $(ps -x | grep zotero)", "killZoteroUnix": "kill -9 $(ps -x | grep zotero)",
"exec": { "exec": {
"7": "/path/to/zotero7.exe" "@comment-zoteroBinPath": "Please input the path of the Zotero binary file in `zoteroBinPath`.",
"@comment-zoteroBinPath-tip": "The path delimiter should be escaped as `\\` for win32. The path is `*/Zotero.app/Contents/MacOS/zotero` for MacOS.",
"zoteroBinPath": "/path/to/zotero.exe",
"@comment-profilePath": "Please input the path of the profile used for development in `profilePath`.",
"@comment-profilePath-tip": "If this field is kept empty, Zotero will start with the default profile.",
"@comment-profilePath-see": "https://www.zotero.org/support/kb/profile_directory",
"profilePath": "/path/to/profile",
"@comment-dataDir": "Please input the directory where the database is located in dataDir",
"@comment-dataDir-tip": "If this field is kept empty, Zotero will start with the default date.",
"@comment-dataDir-see": "https://www.zotero.org/support/zotero_data",
"dataDir": ""
} }
} }