问题
Since it is not necessary to have package.json file with deno, how can I as a developer have a similar experience just as we have with npm scripts in package.json?
回答1:
deno install
You can create executable, aliased scripts with deno install.
It will provide a thin shell/cmd wrapper for the specified main module and CLI arguments. Example:
deno install --root . -n serve --allow-read --allow-net https://deno.land/std@0.54.0/http/file_server.ts
The result is a serve script, similar to npm "scripts": { "serve": ... }:
./bin/serve # run `serve` script (~ npm run serve)
If the project's bin folder is added to PATH environment, the command shortens up to serve.
What deno install does
- creates
binfolder, if not existent - adds
serve/serve.cmdfile with following content (Windows here):% generated by deno install % @deno.exe "run" "--allow-read" "--allow-net" "https://deno.land/std@0.54.0/http/file_server.ts" %* -nis the command name used later on (can be left out)--rootspecifies thebinroot location (otherwise~/.deno)-foption overwrites an existent alias
Side note: Any .js/.ts script is a valid reference - source code location (local/URL) does not matter. If external shell scripts are to be included, you can also run them inside a subprocess.
Built-in deno commands
Deno already comes with built-in solutions for common ecosystem tasks, e.g. bundle, fmt, test and lint later on (see deno help). You can invoke these commands directly - no need to define custom scripts:
deno test
deno fmt
deno cache -r main.ts # similar to `npm run build` / `tsc`
# ...
Example: Custom npm run build
// ./scripts/build.ts
// create subprocess
const p = Deno.run({
cmd: ["deno", "cache", "-r", "--unstable", "main.ts"],
});
await p.status();
deno install --root . --allow-run scripts\build.ts
./bin/build # execute build script
回答2:
I've been working on a solution that mimics the package.json scripts sections while adding some Deno specific functionalities.
You need first to install denox you can find the instructions here https://github.com/BentoumiTech/denox
Then create a .deno-workspace file where you specify your scripts list :
scripts:
# "denox run start" will execute main.ts with example.com networking permissions
start:
file: main.ts
permissions:
allow-net: example.com
# "denox run develop" will execute main.ts with localhost networking permissions
develop:
file: main.ts
permissions:
allow-net: localhost
You can then run
$ denox run start$ denox run develop
回答3:
You can create your own files as denoDept.js
export { assert } from "https://deno.land/std@v0.39.0/testing/asserts.ts";
export { green, bold } from "https://deno.land/std@v0.39.0/fmt/colors.ts";
And you can add all your dependencies in a single file and use it so it will look like package manager.
回答4:
velociraptor may be of help, especially if you want to run arbitrary shell scripts.
It accepts both yaml, json and ts script configuration files. The following example illustrates the main features:
# scripts.yaml
scripts:
start: deno run server.ts # Scripts can be simple command strings
opts: # Or objects
cmd: deno run server.ts
desc: Starts the server
tsconfig: tsconfig.json # Deno cli options
imap: importmap.json
allow:
- read
- net
env: # Env vars
PORT: 8080
compact: server.ts # `deno run` is automatically prepended
# when the script starts with a .ts file
multiple: # Lists of commands are executed in series
- echo one
- echo two
concurrent: # Use the pll property to declare
pll: # concurrent scripts
- echo one
- echo two
env: # Top level options are sent to all the scripts
PORT: 3000
allow:
- write
Run vr without arguments to see a list of available scripts. To execute a script run:
$ vr <script name> [additional args]...
# or
$ vr run <script name> [additional args]...
# Additional args are passed to the script
ie
vr start
Disclaimer: I'm the author
来源:https://stackoverflow.com/questions/61763366/deno-how-to-substitute-npm-scripts-package-json