Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cmorten/deno-rollup
Next-generation ES module bundler ported for Deno
https://github.com/cmorten/deno-rollup
cli deno deno-module deno-rollup denoland javascript rollup rollup-library rollupjs
Last synced: 3 months ago
JSON representation
Next-generation ES module bundler ported for Deno
- Host: GitHub
- URL: https://github.com/cmorten/deno-rollup
- Owner: cmorten
- License: mit
- Archived: true
- Created: 2021-01-10T17:59:13.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-08-28T09:20:58.000Z (over 2 years ago)
- Last Synced: 2024-05-18T20:42:50.564Z (8 months ago)
- Topics: cli, deno, deno-module, deno-rollup, denoland, javascript, rollup, rollup-library, rollupjs
- Language: TypeScript
- Homepage:
- Size: 489 KB
- Stars: 74
- Watchers: 6
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS.md
- Security: SECURITY.md
Awesome Lists containing this project
README
deno-rollup
Next-generation ES module bundler for Deno ported from Rollup.
---
**Deprecation Notice**: _Deno now supports a [`--compat` flag](https://github.com/denoland/deno/issues/12295) that allows for the running of Node modules in Deno through the [Node compatibility layer](https://deno.land/[email protected]/node). See the [official Rollup docs on Deno usage](https://rollupjs.org/guide/en/#deno)._
_From [Deno 1.25 there is also has support for using NPM specifiers](https://deno.com/blog/v1.25#experimental-npm-support):_
```ts
import { rollup } from "npm:rollup";
``````console
deno run --unstable --allow-env --allow-read --allow-write npm:rollup
```_This renders the core and CLI parts of this module obsolete._
_Future efforts will be spent bolstering the Node compatibility layer instead of keeping this module aligned with Rollup for Node._
---
## Table of Contents
- [Overview](#overview)
- [Installation](#installation)
- [Documentation](#documentation)
- [Plugins](#plugins)
- [Examples](#examples)
- [Contributing](#contributing)
- [License](#license)## Overview
[Rollup](https://github.com/rollup/rollup) is a module bundler for JavaScript
which compiles small pieces of code into something larger and more complex, such
as a library or application.This library extends Rollup so that it can be used in Deno - supporting core
Deno features out-of-the-box such as URL imports, Typescript and JSX.## Installation
deno-rollup can be used either through a
[command line interface (CLI)](https://rollupjs.org/guide/en/#command-line-reference)
with an optional configuration file, or else through its
[JavaScript API](https://rollupjs.org/guide/en/#javascript-api).### CLI
To install the CLI run:
```console
deno install -f -q --allow-read --allow-write --allow-net --allow-env --unstable https://deno.land/x/[email protected]+0.20.0/rollup.ts
```And follow any suggestions to update your `PATH` environment variable.
You can then use the CLI to bundle your modules:
```console
# compile to an ESM
rollup main.js --format es --name "myBundle" --file bundle.js
```You can also rebuild the bundle when it's source or config files change on disk
using the `--watch` flag:```console
# recompile based on `rollup.config.ts` when source files change
rollup -c --watch
```### JavaScript API
You can import deno-rollup straight into your project to bundle your modules:
```ts
import { rollup } from "https://deno.land/x/[email protected]+0.20.0/mod.ts";const options = {
input: "./mod.ts",
output: {
dir: "./dist",
format: "es" as const,
sourcemap: true,
},
};const bundle = await rollup(options);
await bundle.write(options.output);
await bundle.close();
```Or using the `watch` API:
```ts
import { watch } from "https://deno.land/x/[email protected]+0.20.0/mod.ts";const options = {
input: "./src/mod.ts",
output: {
dir: "./dist",
format: "es" as const,
sourcemap: true,
},
watch: {
include: ["src/**"],
},
};const watcher = await watch(options);
watcher.on("event", (event) => {
// event.code can be one of:
// START — the watcher is (re)starting
// BUNDLE_START — building an individual bundle
// * event.input will be the input options object if present
// * event.outputFiles contains an array of the "file" or
// "dir" option values of the generated outputs
// BUNDLE_END — finished building a bundle
// * event.input will be the input options object if present
// * event.outputFiles contains an array of the "file" or
// "dir" option values of the generated outputs
// * event.duration is the build duration in milliseconds
// * event.result contains the bundle object that can be
// used to generate additional outputs by calling
// bundle.generate or bundle.write. This is especially
// important when the watch.skipWrite option is used.
// You should call "event.result.close()" once you are done
// generating outputs, or if you do not generate outputs.
// This will allow plugins to clean up resources via the
// "closeBundle" hook.
// END — finished building all bundles
// ERROR — encountered an error while bundling
// * event.error contains the error that was thrown
});// This will make sure that bundles are properly closed after each run
watcher.on("event", (event) => {
if (event.code === "BUNDLE_END") {
event.result.close();
}
});// stop watching
watcher.close();
```## Documentation
Please refer to the official [Rollup Documentation](https://rollupjs.org).
Known deviations from Rollup:
- Deno code support: TypeScript and URL imports supported out-of-the-box.
- CLI does not currently support some nested "dot" flags, namely:
`--no-treeshake.*`, `--watch.*` and `--no-watch.*`.
- CLI does not currently support the `--plugin` flag.
- Some warnings have yet to be implemented.Where further deviations / incompatibility are found, please raise an issue.
## Plugins
A suite of deno-rollup compatible plugins are available in the
[plugins](./plugins) directory.## Examples
To run the [examples](./examples) you have a couple of options:
### Direct from repository
1. Run the deno-rollup `helloDeno` example directly from the repository:
```console
deno run --allow-read="./" --allow-write="./dist" --allow-net="deno.land" --allow-env --unstable https://deno.land/x/[email protected]+0.20.0/examples/helloDeno/rollup.build.ts
```This will create a `./dist` directory with the bundled files in your current
working directory.### Clone
1. Clone the deno-rollup repo locally:
```bash
git clone git://github.com/cmorten/deno-rollup.git --depth 1
cd deno-rollup
```2. Then enter the desired examples directory and run the build script:
```bash
cd examples/helloDeno
deno run --allow-read="./" --allow-write="./dist" --allow-net="deno.land" --allow-env --unstable ./rollup.build.ts
```This will create a `./dist` directory with the bundled files in the current
directory.3. Further details are available in each example directory.
## Contributing
[Contributing guide](https://github.com/cmorten/deno-rollup/blob/main/.github/CONTRIBUTING.md)
---
## License
deno-rollup is licensed under the [MIT License](./LICENSE.md).
The license for the Rollup library, which this library adapts, is available at
[ROLLUP_LICENSE](./ROLLUP_LICENSE.md).Derived works other than from [Rollup](https://github.com/rollup/rollup) are
attributed with their license in source.