https://github.com/tjenkinson/rollup-plugin-bundle-guard
A rollup plugin that makes sure you don't accidentally import something statically, which could have an effect on your bundle size.
https://github.com/tjenkinson/rollup-plugin-bundle-guard
dynamic-import guard import rollup rollup-plugin static-import
Last synced: 6 months ago
JSON representation
A rollup plugin that makes sure you don't accidentally import something statically, which could have an effect on your bundle size.
- Host: GitHub
- URL: https://github.com/tjenkinson/rollup-plugin-bundle-guard
- Owner: tjenkinson
- License: mit
- Created: 2019-11-16T16:23:02.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-03-29T19:34:48.000Z (over 1 year ago)
- Last Synced: 2025-04-03T16:39:45.481Z (6 months ago)
- Topics: dynamic-import, guard, import, rollup, rollup-plugin, static-import
- Language: JavaScript
- Size: 652 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://badge.fury.io/js/rollup-plugin-bundle-guard)
# rollup-plugin-bundle-guard
A rollup plugin that makes sure you don't accidentally import something statically, which could have an effect on your bundle size.
## How?
Tag files you want to be in the same group by adding a comment with the group name.
```js
// rollup-plugin-bundle-guard: group=entry
```If you attempt to statically import a file that is not in the same group, your build will fail with something like:
```
"entry.js" statically imports "load-me-dynamically.js" which is not allowed. Should it be in "entry"?
```That's it!
### More Detail
With strict mode disabled anything that is not assigned a group will default to the group named `default`, and anything is allowed to import something assigned to the `default` group.
Each module can only be assigned to a single group. You can however include additional groups that are allowed to import the module with the following comment:
```js
// rollup-plugin-bundle-guard: allowedImportFrom= ...
```This makes it possible for separate bundles to statically import shared dependencies.
## Installation
```
npm install --save-dev rollup-plugin-bundle-guard
```## Usage
rollup.config.js
```js
const rollupPluginBundleGuard = require('rollup-plugin-bundle-guard');export default {
input: 'main.js',
plugins: [
// default config
// rollupPluginBundleGuard(),// all the options
rollupPluginBundleGuard({
// Defaults to `false`. If enabled, all imported modules must be assigned a group.
// Otherwise anything without a group is assigned a group named `default`
strictMode: false,
modules: [
// 'react' can be imported from both the `entry` and `default` group
{ allowedImportFrom: ['entry', 'default'], module: 'react' },
// anything that contains the string 'somegroup' will be part of the 'someGroup' group
{ group: 'someGroup', module: /somegroup/ },
],
// optional. The default (below) disables checking comments for anything in 'node_modules'
comments: {
pathPatterns: [ /node_modules/ ],
isWhitelist: false
}
})
// ...
],
// ...
});
```main.js
```js
// rollup-plugin-bundle-guard: group=entryimport 'react'; // allowed because `entry` is allowed to import `react`
import './a.js'; // allowed because `./a.js` is also in `entry`
import './b.js'; // ERROR! not allowed because `./b.js` is not in `entry`import('./b.js'); // allowed because it's a dynamic import
```a.js
```js
// rollup-plugin-bundle-guard: group=entryconsole.log('In module a.');
```b.js
```js
// rollup-plugin-bundle-guard: group=group2import './c.js'; // ERROR! c is in `default`, not `group2`
console.log('In module b.');
```c.js
```js
// in the default group
import './d.js';console.log('In module c.');
```d.js
```js
// in the `default` group
import 'react'; // allowed because `default` is allowed to import `react`import './a.js'; // allowed because in non strict mode `a.js` is allowing imports from `default`
console.log('In module d.');
```