问题
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
bin
folder, if not existent - adds
serve
/serve.cmd
file 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" %*
-n
is the command name used later on (can be left out)--root
specifies thebin
root location (otherwise~/.deno
)-f
option 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