-
Notifications
You must be signed in to change notification settings - Fork 0
Custom Scripts
Advanced script customization and manual configuration.
Instead of using the wizard or plus button, you can manually create scripts:
{
"scripts": {
"dev": "vite",
"dev:mirror": "concurrently \"npx devmirror-cli\" \"npm run dev\""
}
}{
"scripts": {
"dev:mirror": "npx devmirror-cli --config=custom.config.json && npm run dev"
}
}{
"scripts": {
"dev:mirror": "npm run build && npx devmirror-cli & npm run serve"
}
}{
"scripts": {
"premirror": "echo 'Starting DevMirror...'",
"mirror": "npx devmirror-cli",
"postmirror": "echo 'DevMirror started'"
}
}{
"scripts": {
"dev": "NODE_ENV=development npm run dev:mirror || npm run dev:normal",
"dev:mirror": "npx devmirror-cli & npm run dev:normal",
"dev:normal": "vite"
}
}{
"scripts": {
"dev:mirror": "npm run dev:mirror:os",
"dev:mirror:os": "run-script-os",
"dev:mirror:win32": "npx devmirror-cli & npm run dev",
"dev:mirror:darwin:linux": "npx devmirror-cli & npm run dev"
}
}Note: Environment variables only work with devmirror-companion. The main CLI uses config files.
{
"scripts": {
"dev:mirror": "DEVMIRROR_OUTPUT=./logs npx devmirror-companion"
}
}{
"scripts": {
"dev:mirror": "cross-env DEVMIRROR_CEF_PORT=8555 npx devmirror-companion"
}
}{
"scripts": {
"dev:mirror": "dotenv -e .env.development npx devmirror-companion"
}
}{
"scripts": {
"dev:all": "npm run dev:frontend & npm run dev:backend & npm run dev:mirror",
"dev:frontend": "cd frontend && npm start",
"dev:backend": "cd backend && npm start",
"dev:mirror": "npx devmirror-cli --config multi.config.json"
}
}{
"scripts": {
"dev:mirror": "npm run build:watch & npx devmirror-cli",
"build:watch": "webpack --watch"
}
}{
"scripts": {
"test:mirror": "npx devmirror-cli & jest --coverage"
}
}{
"scripts": {
"dev:mirror": "sleep 2 && npx devmirror-cli & npm run dev"
}
}{
"scripts": {
"dev:mirror": "until npx devmirror-cli; do sleep 1; done & npm run dev"
}
}{
"scripts": {
"dev:mirror": "wait-on tcp:3000 && npx devmirror-cli || npm run dev"
}
}scripts/run-with-mirror.js:
const { spawn } = require('child_process');
const config = require('../devmirror.config.json');
// Start DevMirror
const mirror = spawn('npx', ['devmirror-cli'], {
stdio: 'inherit',
env: { ...process.env, DEVMIRROR_CONFIG: JSON.stringify(config) }
});
// Start dev server after delay
setTimeout(() => {
spawn('npm', ['run', 'dev'], { stdio: 'inherit' });
}, 2000);scripts/dev-mirror.sh:
#!/bin/bash
# Check if port is available
if lsof -Pi :9222 -sTCP:LISTEN -t >/dev/null ; then
echo "Port 9222 is already in use"
exit 1
fi
# Start DevMirror in background
npx devmirror-cli &
MIRROR_PID=$!
# Start dev server
npm run dev
# Cleanup on exit
trap "kill $MIRROR_PID" EXITscripts/dev-mirror.ps1:
# Start DevMirror
Start-Process -NoNewWindow -FilePath "npx" -ArgumentList "devmirror-cli"
# Wait for port
Start-Sleep -Seconds 2
# Start dev server
npm run dev{
"scripts": {
"dev:mirror": "node -e \"require('./scripts/mirror-config.js')()\" && npm run dev"
}
}scripts/mirror-config.js:
const fs = require('fs');
const path = require('path');
module.exports = function() {
const branch = require('child_process')
.execSync('git branch --show-current')
.toString().trim();
const configs = {
main: { url: 'http://localhost:3000' },
develop: { url: 'http://localhost:3001' },
feature: { url: 'http://localhost:3002' }
};
const branchConfig = configs[branch] || configs.develop;
// Write dynamic config file
fs.writeFileSync(
path.join(__dirname, '..', 'devmirror.config.json'),
JSON.stringify({ ...branchConfig, outputDir: './devmirror-logs', mode: 'cdp' }, null, 2)
);
};{
"scripts": {
"dev:mirror": "run-p mirror dev",
"mirror": "npx devmirror-cli",
"dev": "vite"
}
}{
"scripts": {
"dev:mirror": "concurrently -n MIRROR,APP \"npx devmirror-cli\" \"npm run dev\""
}
}{
"scripts": {
"dev:mirror": "npm-run-all --parallel mirror dev",
"mirror": "npx devmirror-cli",
"dev": "vite"
}
}{
"scripts": {
"dev:safe": "npm run dev:mirror || npm run dev",
"dev:mirror": "npx devmirror-cli && npm run dev",
"dev": "vite"
}
}{
"scripts": {
"dev:mirror": "npx devmirror-cli || (echo 'DevMirror failed, continuing...' && npm run dev)"
}
}{
"scripts": {
"dev:mirror": "node --max-old-space-size=4096 node_modules/.bin/devmirror-cli"
}
}{
"scripts": {
"dev:mirror": "nice -n 10 npx devmirror-cli & npm run dev"
}
}{
"scripts": {
"dev:mirror:debug": "npx devmirror-cli"
}
}Note: Check VS Code Output panel (DevMirror channel) for debugging information.
{
"scripts": {
"dev:mirror:inspect": "node --inspect node_modules/.bin/devmirror-cli"
}
}- Keep scripts simple - Complex logic belongs in separate files
-
Use descriptive names -
dev:mirroris clearer thandm - Document custom scripts in your README
- Test scripts on all target platforms
- Use environment variables for configuration
- Handle errors gracefully with fallbacks
- Clean up processes on exit
| Pattern | Script | Use Case |
|---|---|---|
| Simple | concurrently "npx devmirror-cli" "npm run dev" |
Most projects |
| Sequential | npm run build && npx devmirror-cli |
Build first |
| Conditional | [ -z "$CI" ] && npm run dev:mirror |
Skip in CI |
| Fallback | npm run dev:mirror \|\| npm run dev |
Optional DevMirror |
Important: The companion script (devmirror-companion) exists but is not exposed as a CLI command. The background script referenced by the wizard (scripts/devmirror-background.js) is not automatically created. These are known issues.
DevMirror v0.4.82 | GitHub | Issues | VS Code Marketplace
Capture 100% of browser console output with Chrome DevTools Protocol
v0.4.82