A simple script runner.
Smooths out script running. Hear me out:
By allowing tsconfig path mappings when calling scripts
// package.json
{
"scripts": {
- "test": "tsx ./tools/scripts/app/test.ts",
+ "test": "envoke @scripts/app/test",
}
}Then run it (use --verbose while debugging)
Will keep track of the execution context as well as the root of the repository.
The following "just works".
- "build": "run -T tsx ../../tools/scripts/app/test.ts",
+ "build": "run -T envoke @scripts/app/test",Environment variables are automatically passed through to the child process.
- "build": "ENV=production tsx ./tools/scripts/app/build-web.ts",
+ "build": "ENV=production envoke @scripts/app/build-web",Works great in CI environments, where you might use actions/github-script or scall scripts directly.
- name: Update PR comment with deployment info
- run: yarn tsx tools/scripts/ci/update-pr-comment.ts
+ run: yarn envoke @scripts/ci/update-pr-comment
env:
CI: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}Install it
npm install --save-dev @takken/envoke
# or
yarn add -D @takken/envoke
# or
pnpm add -D @takken/envoke
# or
bun add -d @takken/envokeCreate a test script:
// ./scripts/hello.ts
console.log("Hello, world!");
console.log("Args:", process.argv.slice(2));
console.log("Env:", process.env);Add a path mapping in your tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@scripts/*": ["./scripts/*"]
}
}
}Then try it
npx envoke @scripts/hello --verbose
# or
yarn envoke @scripts/hello --verbose
# or
pnpm envoke @scripts/hello --verbose
# or
bun run envoke @scripts/hello --verbose- Read .env files using dotenv
- Add flag to pass NODE_ENV=production/development
This package is MIT licensed.
