Welcome to Trex π±βπ
Package management for deno (pronounced βtee rexβ)
What is Trex?
is a Package management for deno similar to npm but maintaining the deno philosophy. packages are cached and only one import_map.json
file is generated.
// import_map.json
{
"imports": {
"http/": "https://deno.land/std/http/"
}
}
For more information about the import maps in deno import maps
Content
installation:
install from nest.land module registry
$ deno install -A --unstable -n trex https://x.nest.land/Trex@1.1.0/cli.ts
note: You should have the last version 1.0.0 >= of deno for no errors.
or in your terminal you can write
$ deno install -A --unstable -n trex https://deno.land/x/trex/cli.ts
we shorten the install command so itβs not that long
The resources that Trex uses are:
- βallow-net
- βallow-read
- βallow-write
- βallow-run
- βallow-env
you can give those permissions explicitly
update Trex using
$ deno install -f -A --unstable -n trex https://deno.land/x/trex/cli.ts
or use:
$ trex update
for versions 0.2.0 or higher.
check for the installation of the Trex tool writing in the terminal:
$ trex --version
and the console should presente the Trex version.
for any help of the commands of Trex write:
$ trex --help
for a better implementation of this tool you can use the tool Commands of deno Commands
How to use
in your command line write:
$ trex install --map fs http fmt
note: you can use trex i βmap fs http fmt
--map
installs packages from the standard library and those hosted at deno.land/x
install package from nest.land or a repository (click me)
Install a package hosted on nest.land
$ trex install --nest opine@0.13.0
note: if you install a package using nest.land you must specify the version, example:
$ Trex i --nest opine@0.13.0
Install a package from some repository
$ trex install --pkg [user]/[repo or repo@tag]/[path/to/file] [packageName]
example:
$ trex install --pkg oakserver/oak/mod.ts oak
this downloads oak directly from its repository
an import_map.json file will be created with the following.
{
"imports": {
"fs/": "https://deno.land/std/fs/",
"http/": "https://deno.land/std/http/",
"fmt/": "https://deno.land/std/fmt/"
}
}
example.
create a test file
// server.ts
import { serve } from "http/server.ts";
import { green } from "fmt/colors.ts";
const server = serve({ port: 8000 });
console.log(green("http://localhost:8000/"));
for await (const req of server) {
req.respond({ body: "Hello World\n" });
}
run in terminal
$ deno run --allow-net --importmap=import_map.json --unstable server.ts
note: it is important to use βimportmap=import_map.json βunstable
using third party packages
example using oak
$ trex i --map oak
in import_map.json
{
"imports": {
"fs/": "https://deno.land/std/fs/",
"http/": "https://deno.land/std/http/",
"fmt/": "https://deno.land/std/fmt/",
"oak": "https://deno.land/x/oak/mod.ts"
}
}
note: third party packages are added using mod.ts
in server.ts
// server.ts
import { Application } from "oak";
const app = new Application();
app.use((ctx) => {
ctx.response.body = "Hello World!";
});
await app.listen({ port: 8000 });
run in terminal
$ deno run --allow-net --importmap=import_map.json --unstable server.ts
import_map.json
file.
download packages from an $ trex install
this downloads all the packages listed in the import_map.json
similar to npm install
add custom package
in your command line write:
$ trex --custom React=https://dev.jspm.io/react/index.js
in import_map.json
{
"imports": {
"fs/": "https://deno.land/std/fs/",
"http/": "https://deno.land/std/http/",
"fmt/": "https://deno.land/std/fmt/",
"oak": "https://deno.land/x/oak/mod.ts",
"React": "https://dev.jspm.io/react/index.js"
}
}
velociraptor or Commands
install tools likein your command line write:
$ trex getTool Commands
this will install the tool
note: If you are a linux/MacOs user youβll have to specificate the PATH manually when the tool gets installed the will appear in your terminal export PATH=β/home/username/.deno/bin:$PATHβ
delete a package
in your command line write:
$ trex delete React
to remove a specific version from the cache and import_map.json, it only works with standard packages and those installed from deno.land/x
$ trex delete fs@0.52.0
in import_map.json
{
"imports": {
"fs/": "https://deno.land/std/fs/",
"http/": "https://deno.land/std/http/",
"fmt/": "https://deno.land/std/fmt/",
"oak": "https://deno.land/x/oak/mod.ts"
}
}
The packages in the standard library or those installed from deno.land/x
will be removed from the cache.
install another version of a package
write the name of the package more @<Version>
example:
$ trex install --map fs@0.54.0
in import_map.json
{
"imports": {
"fs/": "https://deno.land/std@0.54.0/fs/"
}
}
note: can be used with third party packages.
check the versions of dependencies using
$ trex --deps
you should see something like that on the console.
// in import_map.json
{
"imports": {
"oak": "https://deno.land/x/oak@v4.0.0/mod.ts",
"http/": "https://deno.land/std@0.51.0/http/"
}
}
name | module | url | version | latest | upToDate |
---|---|---|---|---|---|
oak | oak | βhttps://deno.land/x/oak@v4.0.0/mod.tsβ | βv4.0.0β | βv5.0.0β | false |
http/ | std | βhttps://deno.land/std@0.54.0/http/β | β0.54.0β | β0.54.0β | true |
thanks to Fzwael this functionality is based on your tool deno-check-updates
see pacakge dependency tree.
$ trex treeDeps fs
you should see this in the terminal
local: C:\Users\trex\AppData\Local\deno\deps\https\deno.land\434fe4a7be02d187573484b382f4c1fec5b023d27d1dcf4f768f300799a073e0
type: TypeScript
compiled: C:\Users\trex\AppData\Local\deno\gen\https\deno.land\std\fs\mod.ts.js
map: C:\Users\trex\AppData\Local\deno\gen\https\deno.land\std\fs\mod.ts.js.map
deps:
https://deno.land/std/fs/mod.ts
βββ¬ https://deno.land/std/fs/empty_dir.ts
β βββ¬ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/path/_constants.ts
β βββ¬ https://deno.land/std/path/win32.ts
β β βββ https://deno.land/std/path/_constants.ts
β β βββ¬ https://deno.land/std/path/_util.ts
β β β βββ https://deno.land/std/path/_constants.ts
β β βββ https://deno.land/std/_util/assert.ts
β βββ¬ https://deno.land/std/path/posix.ts
β β βββ https://deno.land/std/path/_constants.ts
β β βββ https://deno.land/std/path/_util.ts
β βββ¬ https://deno.land/std/path/common.ts
β β βββ¬ https://deno.land/std/path/separator.ts
β β βββ https://deno.land/std/path/_constants.ts
β βββ https://deno.land/std/path/separator.ts
β βββ https://deno.land/std/path/_interface.ts
β βββ¬ https://deno.land/std/path/glob.ts
β βββ https://deno.land/std/path/separator.ts
β βββ¬ https://deno.land/std/path/_globrex.ts
β β βββ https://deno.land/std/path/_constants.ts
β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/_util/assert.ts
βββ¬ https://deno.land/std/fs/ensure_dir.ts
β βββ¬ https://deno.land/std/fs/_util.ts
β βββ https://deno.land/std/path/mod.ts
βββ¬ https://deno.land/std/fs/ensure_file.ts
β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/fs/ensure_dir.ts
β βββ https://deno.land/std/fs/_util.ts
βββ¬ https://deno.land/std/fs/ensure_link.ts
β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/fs/ensure_dir.ts
β βββ https://deno.land/std/fs/exists.ts
β βββ https://deno.land/std/fs/_util.ts
βββ¬ https://deno.land/std/fs/ensure_symlink.ts
β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/fs/ensure_dir.ts
β βββ https://deno.land/std/fs/exists.ts
β βββ https://deno.land/std/fs/_util.ts
βββ https://deno.land/std/fs/exists.ts
βββ¬ https://deno.land/std/fs/expand_glob.ts
β βββ https://deno.land/std/path/mod.ts
β βββ¬ https://deno.land/std/fs/walk.ts
β β βββ https://deno.land/std/_util/assert.ts
β β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/_util/assert.ts
βββ¬ https://deno.land/std/fs/move.ts
β βββ https://deno.land/std/fs/exists.ts
β βββ https://deno.land/std/fs/_util.ts
βββ¬ https://deno.land/std/fs/copy.ts
β βββ https://deno.land/std/path/mod.ts
β βββ https://deno.land/std/fs/ensure_dir.ts
β βββ https://deno.land/std/fs/_util.ts
β βββ https://deno.land/std/_util/assert.ts
βββ https://deno.land/std/fs/read_file_str.ts
βββ https://deno.land/std/fs/write_file_str.ts
βββ https://deno.land/std/fs/read_json.ts
βββ https://deno.land/std/fs/write_json.ts
βββ https://deno.land/std/fs/walk.ts
βββ https://deno.land/std/fs/eol.ts
Integrity checking & lock files
Letβs say your module depends on remote module . When you compile your module for the first time is retrieved, compiled and cached. It will remain this way until you run your module on a new machine (say in production) or reload the cache (through for example). But what happens if the content in the remote url is changed? This could lead to your production module running with different dependency code than your local module. Denoβs solution to avoid this is to use integrity checking and lock files.
info from deno page
use:
$ trex --lock file.ts
this generates a lock.json
file.
if in input file you use import_map.json
you can specify it.
$ trex --lock --importmap file.ts
for more information this is the deno document
Contributing
contributions are welcome, create a pull request and send us your feature, first check the CONTRIBUTING GUIDELINES.
LICENSE MIT