{"id":13485152,"url":"https://github.com/crewdevio/Trex","last_synced_at":"2025-03-27T17:30:50.099Z","repository":{"id":40988900,"uuid":"266461019","full_name":"crewdevio/Trex","owner":"crewdevio","description":"Package Manager for deno 🦕","archived":false,"fork":false,"pushed_at":"2023-08-18T22:39:08.000Z","size":442,"stargazers_count":733,"open_issues_count":8,"forks_count":22,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-19T20:39:21.292Z","etag":null,"topics":["deno","deno-package-manage","denoland","modules","nestland","npm-package","package","package-manager","party-packages","trex"],"latest_commit_sha":null,"homepage":"https://crewdevio.mod.land/projects/Trex","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crewdevio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":"FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":null,"patreon":null,"open_collective":"trex","ko_fi":"crewdevio","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-05-24T03:14:49.000Z","updated_at":"2025-02-16T06:03:07.000Z","dependencies_parsed_at":"2023-09-29T08:56:25.215Z","dependency_job_id":null,"html_url":"https://github.com/crewdevio/Trex","commit_stats":{"total_commits":365,"total_committers":13,"mean_commits":"28.076923076923077","dds":"0.23835616438356166","last_synced_commit":"373878c36a2c782d1986a7b857b4d8bb174436cc"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crewdevio%2FTrex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crewdevio%2FTrex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crewdevio%2FTrex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crewdevio%2FTrex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crewdevio","download_url":"https://codeload.github.com/crewdevio/Trex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245892469,"owners_count":20689507,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","deno-package-manage","denoland","modules","nestland","npm-package","package","package-manager","party-packages","trex"],"created_at":"2024-07-31T17:01:48.136Z","updated_at":"2025-03-27T17:30:49.527Z","avatar_url":"https://github.com/crewdevio.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003eTrex 🦕\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://cdn.discordapp.com/attachments/772853383803437058/828483429787500564/687474703a2f2f636c69706172742d6c6962726172792e636f6d2f696d6167655f67616c6c6572792f333131392e706e67.png\" width=\"350\"\u003e\n  \u003cp align=\"center\"\u003ePackage management for deno (pronounced \"tee rex\") \u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://github.com/crewdevio/Trex/issues\"\u003e\n     \u003cimg alt=\"GitHub issues\" src=\"https://img.shields.io/github/issues/crewdevio/Trex\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/crewdevio/Trex/network\"\u003e\n     \u003cimg alt=\"GitHub forks\" src=\"https://img.shields.io/github/forks/crewdevio/Trex\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/crewdevio/Trex/stargazers\"\u003e\n     \u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/crewdevio/Trex\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/crewdevio/Trex/blob/master/LICENSE\"\u003e\n     \u003cimg alt=\"GitHub license\" src=\"https://img.shields.io/github/license/crewdevio/Trex\"\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://deno.land\"\u003e\n     \u003cimg src=\"https://img.shields.io/badge/deno-%5E1.10.2-green?logo=deno\"/\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://nest.land/package/Trex\"\u003e\n     \u003cimg src=\"https://nest.land/badge.svg\" /\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\n![Use Trex](https://cdn.discordapp.com/attachments/727169454667989016/728363543614980116/ajio.gif)\n\n## About\n\nTrex is a package management tool for deno similar to npm but keeping close to\nthe deno philosophy. Packages are cached and only one `import_map.json` file is\ngenerated.\n\n```javascript\n// import_map.json\n\n{\n  \"imports\":  {\n    \"http/\":  \"https://deno.land/std/http/\"\n  }\n}\n```\n\nFor more information about the import maps in deno see\n[import maps](https://deno.land/manual/linking_to_external_code/import_maps).\n\n## Additional topics\n\n- [Proxy](docs/proxy.md)\n\n- [Integration with nest.land](docs/nest_land_setup.md)\n\n- [How can I have my package available to download with\n  Trex?](docs/add_package.md)\n\n## Installation\n\n```console\ndeno install -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts\n```\n\n\u003e **Note**: Works with deno \u003e= 1.10.2\n\n**We shorten the install command so it's not that long**\n\nThe permissions that Trex uses are:\n\n- `--allow-net`\n- `--allow-read`\n- `--allow-write`\n- `--allow-run`\n- `--allow-env`\n\nYou can give those permissions explicitly.\n\n## Updating Trex\n\nInstall new version with the `-f` flag:\n\n```console\ndeno install -f -A --unstable --import-map=https://deno.land/x/trex/import_map.json -n trex --no-check https://deno.land/x/trex/cli.ts\n```\n\nOr use the `upgrade` command:\n\n```console\ntrex upgrade\n```\n\n\u003e **Note**: available for versions 0.2.0 or higher.   \n\n\u003e **Note**: to try the latest pre-release features, use the `--canary` flag.\n\nVerify the installation of Trex:\n\n```console\ntrex --version\n```\n\nThe console should print the Trex version.  \n\nFor help on the commands that Trex provides, use:\n\n```console\ntrex --help\n```\n\n## Usage\n\n### Installing from deno.land\n\nUse the `--map` flag to install packages from the [Standard Library](https://deno.land/std) (`std`) and those hosted at `deno.land/x`.\n\n#### Example\n\nInstall the `fs`, `http` and `fmt` modules from `std`:\n\n```console\ntrex install --map fs http fmt\n```\n\n\u003e **Note**: you can also use the shorthand `i`, as in: `trex i --map fs http fmt`\n\n### Installing from nest.land\n\nUse the `--nest` flag and **specify an explicit version** to install packages hosted on [nest.land](https://nest.land/gallery).\n\n```console\ntrex install --nest [pkg]@[version]\n```\n\n#### Examples\n\n```console\ntrex install --nest opine@0.13.0\n```\n\n```console\ntrex i --nest etag@0.0.2\n```\n\nYou can install `std` packages from `nest.land` by specifying the package and version:\n\n```console\ntrex install --nest fs@0.61.0\n```\n\n### Installing from a repository\n\n```console\ntrex install --pkg [user]/[repo or repo@tag/branch]/[path/to/file] [packageName]\n```\n\n#### Example\n\n```console\ntrex install --pkg oakserver/oak@main/mod.ts oak\n```\n\n\u003e **Warning**: In the event that the repository uses a branch other than master as\n\u003e the main branch, this **must be specified**!\n\nThe above downloads oak directly from its repository.\n\n### Example import map\n\nAll installation methods produce an `import_map.json` file:\n\n```json\n{\n  \"imports\": {\n    \"fs/\": \"https://deno.land/std/fs/\",\n    \"http/\": \"https://deno.land/std/http/\",\n    \"fmt/\": \"https://deno.land/std/fmt/\"\n  }\n}\n```\n\n### Downloading packages\n\nDownload all the packages listed in the `import_map.json` similar to\n`npm install`:\n\n```console\ntrex install\n```\n\n### Adding custom packages\n\nInstall a package from a custom URL source:\n\n```console\ntrex --custom React=https://dev.jspm.io/react/index.js\n```\n\n```jsonc\n// import_map.json\n{\n  \"imports\": {\n    \"http/\": \"https://deno.land/std/http/\",\n    \"fmt/\": \"https://deno.land/std/fmt/\",\n    \"oak\": \"https://deno.land/x/oak/mod.ts\",\n    \"React\": \"https://dev.jspm.io/react/index.js\"\n  }\n}\n```\n\n### Deleting packages\n\n```console\ntrex delete React\n```\n\nRemove a specific version from the cache and the `import_map.json` file:\n\n```console\ntrex delete fs@0.52.0\n```\n\n```jsonc\n// import_map.json\n{\n  \"imports\": {\n    \"fs/\": \"https://deno.land/std/fs/\",\n    \"http/\": \"https://deno.land/std/http/\",\n    \"fmt/\": \"https://deno.land/std/fmt/\",\n    \"oak\": \"https://deno.land/x/oak/mod.ts\"\n  }\n}\n```\n\n\u003e **Note**: Removing from cache only works with packages from `std` and `deno.land/x`\n\n### Installing an explicit version of a package\n\nSpecify a package's version:\n\n```console\ntrex install --map fs@0.54.0\n```\n\n```jsonc\n// import_map.json\n{\n  \"imports\": {\n    \"fs/\": \"https://deno.land/std@0.54.0/fs/\"\n  }\n}\n```\n\n\u003e **Note**: can be used with third party packages.\n\n### Checking for outdated dependencies\n\n```console\ntrex check\n```\n\u003e **Warning**: Currently limited to packages from [`deno.land/std`](https://deno.land/std) and [`deno.land/x`](https://deno.land/x),\n\u003e in future versions this will support third party registries and CDN sources as well.\n\n### Run Scripts with `run.json`\n\nYou can create command aliases, similar to `deno task` or [`npm run`](https://docs.npmjs.com/cli-commands/run-script.html).  \n\nSimply create a **`run.json`** file with the following structure:\n\n```json\n{\n  \"scripts\": {\n    \"welcome\": \"deno run https://deno.land/std@0.71.0/examples/welcome.ts\"\n  }\n}\n```\n\n#### Aliasing external commands\n\nYou can call a command from within another, or call a script like `denopack`\nor `eggs update` from within a command alias:\n\n```jsonc\n// run.json\n{\n  \"scripts\": {\n    \"start\": \"trex run welcome\",\n    \"welcome\": \"deno run https://deno.land/std@0.71.0/examples/welcome.ts\",\n    \"dev\": \"denon run ./app.ts\",\n    \"build\": \"aleph build\",\n\t\t\"update\": \"eggs update\"\n  }\n}\n```\n\nThen, for example, to update your dependencies:\n\n```console\ntrex run update\n```\n\u003e This will execute `eggs update`\n\n\n#### Installation life cycle\n\nWhen the command `trex install` or `trex i` executed, you can perform actions\nbefore and after the execution of `trex install`.\n\n**Execution order**:\n\n1. `preinstall`\n2. `install`\n3. `postinstall`\n\n```jsonc\n// run.json\n{\n  \"scripts\": {\n    \"start\": \"trex run welcome\",\n    \"welcome\": \"deno run https://deno.land/std@0.71.0/examples/welcome.ts\",\n    \"dev\": \"denon run ./app.ts\",\n    \"build\": \"aleph build\",\n    \"preinstall\": \"deno --version\",\n    \"postinstall\": \"deno test --unstable\"\n  }\n}\n```\n\n\u003e **Note**: you can use the --watch flag to monitor the changes and rerun the\n\u003e script, example:\n\n```sh\ndeno run --watch --unstable https://deno.land/std@0.71.0/examples/welcome.ts\n```\n\n#### Passing arguments to aliases\n\nYou can provide arguments when calling the command alias. These will be passed to the file to execute:\n\n```console\ntrex run start --port=3000 --env\n```\n\n```typescript\nconsole.log(Deno.args); // [\"--port=3000\", \"--env\"]\n```\n\n#### Reboot Script Alias Protocol (or _RSAP_)\n\nWith trex you can create script aliases that reload every time a file is\nchanged, similar to running deno with the `--watch` flag.\n\nThe Reboot Script Alias Protocol (RSAP) provides this same functionality.\nJust add a `files` property to your `run.json` file, specifying an array\nof files that will be watched. When changes are detected in those files,\nyour script aliases will be restarted immediately.\n\n```jsonc\n// run.json\n{\n  \"scripts\": {\n    \"start\": \"trex run welcome\",\n    \"dev\": \"denon run ./app.ts\",\n    \"build\": \"aleph build\"\n  },\n  \"files\": [\"./app.ts\"]\n}\n```\n\nYou only have to add the `files` option in the `run.json` file and it will only\nobserve the files and folders that you specify, if you leave the array empty it\nwill observe all the files.\n\n```jsonc\n// run.json\n{\n  \"scripts\": {\n    \"dev\": \"go build\"\n  },\n  \"files\": [\"./main.go\"]\n}\n```\n\nFor the script alias to use `rsap` you just need to add the `--watch` or `-w`\nflag to the end of the command alias:\n\n```console\ntrex run dev --watch [...args]\n```\n\nIt can be used with any CLI tool, compiler or interpreter.\n\n#### YAML is also acceptable (`run.yml` or `run.yaml`)\n\n```yaml\n- scripts:\n    dev: go build\n- files:\n    - ./main.go\n```\n\n#### Limitations\n\nA limitation of watch mode is that they **do not** restart the processes that never\nend (such as http servers). In those cases we recommend other alternatives, such as\n[denon](https://deno.land/x/denon).\n\n### Virtual cli tool execution\n\u003e Trex will auto detect cli file in the order of **\"cli.ts\", \"cli.js\", \"%pacakge-name%.ts\", \"%package-name%.js\", \"main.ts\", \"main.js\", \"mod.ts\", \"mod.js\", \"index.ts\", \"index.js\"**. \n\u003e If you want to publish a cli package, name your cli file as either of above(e.g. `cli.ts`) in your root package.\n\n`trex exec` allows you to run many cli tools hosted at `deno.land/x`\n\n```console\ntrex exec aleph init hello_world\n```\n\ntrex will fetch aleph's cli and run without installing it locally using\n`deno install`, you can also specify the version you want to use.\n\n```console\ntrex exec aleph@v0.2.28 init hello_world\n```\n\n#### Permissions (perms)\n\nYou can also specify the permissions that the cli will use. \nJust pass the `--perms` flag followed by comma-separated permissions:\n\n```console\ntrex exec --perms env,read,write,net denon run ./app.ts\n```\n\n- `env`: --allow-env\n- `write`: --allow-write\n- `read`: --allow-read\n- `net`: --allow-net\n- `run`: --allow-run\n- `reload`: --reload\n- `plugin`: --allow-plugin\n- `hrtime`: --allow-hrtime\n- `A`: --allow-all\n\n\u003e **Warning**: if you don't specify the permissions, they are **all** automatically granted to you\n\nYou can also combine this with the command alias:\n\n```jsonc\n// run.json\n{\n  \"scripts\": {\n    \"denon\": \"trex exec denon run\"\n  },\n  \"files\": [\"./app.ts\"]\n}\n```\n\n```console\ntrex run denon ./app.ts\n```\n\nAnd yes, you can do this:\n\n```console\ntrex exec trex exec trex exec ....\n```\n\nEven this:\n\n```console\ntrex exec land trex exec land trex exec ....\n```\n\nThis functionality is heavily inspired by\n[npx](https://docs.npmjs.com/cli/v7/commands/npx) and\n[land](https://deno.land/x/land). If you need another alternative to `trex exec`\nto use in `deno`, [land](https://deno.land/x/land) this is a great option.\n\n### Local configuration and global configuration (experimental)\n\nWhen you work with import maps trex by default will handle everything using an\nimport_map.json file, but what if I want to use an import-map.json or an\nimportMap.json instead?\n\nThat's what the global settings are for! Basically it allows you to change the\nbehavior of trex, with respect to the file where the dependencies will be\nhandled.\n\n#### Example\n\n```console\ntrex global-config --importMap=import-map.json\n```\n\nThis will change the default name from import_map.json to import-map.json. to\nobtain the name or format used you must execute the following command.\n\n```console\ntrex global-config --getImportMap\n```\n\nBut what happens if I am working with several people on the same project and we\nhave different configurations? For these cases there is the local configuration\nor local configuration file - `trex.config.json`:\n\n```jsonc\n// trex.config.json\n{\n  \"importMap\": \"importMap.json\"\n}\n```\n\nThis will tell trex that the format for the import map will be the one dictated\nby the config file. This allows that there are no problems with the different\nlocal configurations of each developer since the configuration file only affects\nthe scope of the project.\n\n\u003e **Note**: the file `trex.config.json` must be at the same level(scope) as the\n\u003e import map for trex to detect it.\n\nThee hierarchy that trex respects with the configurations is the following:\n\n```mermaid\ngraph TD\ntrex.config.json --\u003e LocalGlobalConfig\nLocalGlobalConfig --\u003e defaultTrexConfig\n```\n\n### Purge a package or URL\n\nIf you want delete a package or url package from cache memory in deno, you can\nuse the `purge` command to remove from cache memory.\n\n```console\ntrex purge oak\n```\n\nThis finds the `oak` package in the `import_map.json`, and removes it from the\ncache.\n\n#### Purging with full URL specifiers\n\n```console\ntrex purge https://deno.land/x/oak@v6.3.1/mod.ts\n```\n\n### Checking a package's dependency tree\n\n```console\ntrex tree fs\n```\n\nThis prints out something like:\n\n```console\nlocal: C:\\Users\\trex\\AppData\\Local\\deno\\deps\\https\\deno.land\\434fe4a7be02d1875....\ntype: TypeScript\ncompiled: C:\\Users\\trex\\AppData\\Local\\deno\\gen\\https\\deno.land\\std\\fs\\mod.ts.js\nmap: C:\\Users\\trex\\AppData\\Local\\deno\\gen\\https\\deno.land\\std\\fs\\mod.ts.js.map\ndeps:\nhttps://deno.land/std/fs/mod.ts\n  ├─┬ https://deno.land/std/fs/empty_dir.ts\n  │ └─┬ https://deno.land/std/path/mod.ts\n  │   ├── https://deno.land/std/path/_constants.ts\n  │   ├─┬ https://deno.land/std/path/win32.ts\n  │   │ ├── https://deno.land/std/path/_constants.ts\n  │   │ ├─┬ https://deno.land/std/path/_util.ts\n  │   │ │ └── https://deno.land/std/path/_constants.ts\n  │   │ └── https://deno.land/std/_util/assert.ts\n  │   ├─┬ https://deno.land/std/path/posix.ts\n  │   │ ├── https://deno.land/std/path/_constants.ts\n  │   │ └── https://deno.land/std/path/_util.ts\n  │   ├─┬ https://deno.land/std/path/common.ts\n  │   │ └─┬ https://deno.land/std/path/separator.ts\n  │   │   └── https://deno.land/std/path/_constants.ts\n  │   ├── https://deno.land/std/path/separator.ts\n  │   ├── https://deno.land/std/path/_interface.ts\n  │   └─┬ https://deno.land/std/path/glob.ts\n  │     ├── https://deno.land/std/path/separator.ts\n  │     ├─┬ https://deno.land/std/path/_globrex.ts\n  │     │ └── https://deno.land/std/path/_constants.ts\n  │     ├── https://deno.land/std/path/mod.ts\n  │     └── https://deno.land/std/_util/assert.ts\n  ├─┬ https://deno.land/std/fs/ensure_dir.ts\n\t\n# ... full response was truncated for brevity\n```\n\n### Integrity checking \u0026 lock files\n\nLet's say your module depends on a remote module. When you compile your module\nfor the first time, it is retrieved, compiled and cached. It will remain this\nway until you run your module on a new machine (e.g. in production) or reload\nthe cache.\n\nBut what happens if the content in the remote url is changed? This could lead to\nyour production module running with different dependency code than your local\nmodule. Deno's solution to avoid this is to use integrity checking and lock\nfiles.\n\nCreate a lockfile:\n\n```console\ndeno cache --lock=lock.json --lock-write file.ts\n```\n\nThe above generates a `lock.json` file.\n\nIf you use `import_map.json` in input file, you can specify it:\n\n```console\ndeno cache --lock=lock.json --lock-write --import-map=import_map.json --unstable file.ts\n```\n\nSee\n[deno document](https://deno.land/manual/linking_to_external_code/integrity_checking)\nfor more info.\n\n## Complete example\n\n### Simple std server\n\n#### Install `http` and `fmt`:\n\n```console\ntrex install --map http fmt\n```\n\n#### Create a simple server\n\n```typescript\n// server.ts\nimport { serve } from \"http/server.ts\";\nimport { green } from \"fmt/colors.ts\";\n\nconst server = serve({ port: 8000 });\nconsole.log(green(\"http://localhost:8000/\"));\n\nfor await (const req of server) {\n  req.respond({ body: \"Hello World\\n\" });\n}\n```\n\n#### Start the server\n\n```console\ndeno run --allow-net --import-map=import_map.json --unstable server.ts\n```\n\n\u003e **Warning**: it is important to use **--import-map=import_map.json --unstable**\n\n### Adding third-party packages: Example using [oak](https://deno.land/x/oak)\n\n#### Install the master version of `oak`\n\n```console\ntrex i --map oak\n```\n\nThis adds `oak` to the `import_map.json` file:\n\n```json\n{\n  \"imports\": {\n    \"http/\": \"https://deno.land/std/http/\",\n    \"fmt/\": \"https://deno.land/std/fmt/\",\n    \"oak\": \"https://deno.land/x/oak/mod.ts\"\n  }\n}\n```\n\n#### Then create an oak application. \n\nNote the `import` statement, thanks to the `import_map.json` addition:\n\n```typescript\n// app.ts\nimport { Application } from \"oak\";\n\nconst app = new Application();\n\napp.use((ctx) =\u003e {\n  ctx.response.body = \"Hello World!\";\n});\n\nawait app.listen({ port: 8000 });\n```\n\n#### Run the server\n\n```console\ndeno run --allow-net --import-map=import_map.json --unstable app.ts\n```\n\n\u003e **Warning**: it is important to use **--import-map=import_map.json --unstable**\n\n## Contributing\n\nContributions are welcome, see [CONTRIBUTING GUIDELINES](CONTRIBUTING.md).\n\n## Licensing\n\nTrex is licensed under the [MIT](https://opensource.org/licenses/MIT) license.\n\n\u003c/br\u003e\n \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://cdn.discordapp.com/attachments/772853383803437058/828483429787500564/687474703a2f2f636c69706172742d6c6962726172792e636f6d2f696d6167655f67616c6c6572792f333131392e706e67.png\" width=\"150\"\u003e\n    \u003ch3 align=\"center\"\u003eTrex is powered by\u003c/h3\u003e\n    \u003cp align=\"center\"\u003e\n       \u003ca href=\"https://nest.land/\"\u003e\n\t  \u003cimg src=\"https://cdn.discordapp.com/attachments/656976424778989602/735587312448176132/favicon_light.svg\" width=\"85\" height=\"85\"\u003e\n       \u003c/a\u003e\n       \u003ca href=\"https://deno.land/\"\u003e\n\t  \u003cimg src=\"https://deno.land/logo.svg\" width=\"85\" height=\"85\"\u003e\n       \u003c/a\u003e\n       \u003ca href=\"https://denopkg.com/\"\u003e\n\t  \u003cimg src=\"https://denopkg.com/denopkg.png\" width=\"90\" height=\"90\"\u003e\n       \u003c/a\u003e\n    \u003c/p\u003e\n  \u003c/p\u003e\n","funding_links":["https://opencollective.com/trex","https://ko-fi.com/crewdevio"],"categories":["TypeScript","Tools","package-manager","源码阅读推荐"],"sub_categories":["XML","Assistants","独特之处 🦖🦕"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrewdevio%2FTrex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrewdevio%2FTrex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrewdevio%2FTrex/lists"}