Comments (5)
[...] there will be times when we want to supply a module's contents [...]
By supply a module's contents, do you mean through some user-supplied module object that implements some Module
interface? Specifying, or at least starting to consider, what such an interface would look like is very interesting. We discussed it briefly in #99, when I tried to present the advantages of a DataModule (and more specifically a JSONModule).
An interface somewhat like this (written in TypeScript) would probably be a good start.
// A top-level identifier within the bundle.
interface Id {
// The deconflicted name to use for the `Id`.
name: string;
// The `Module` instance which defines the `Id`.
// ( `undefined` in the case of global identifiers. )
// If the `Id` is itself a `Module` the invariant `this.module === this` must hold.
module?: Module;
// Mark the identifier for inclusion
// In the case of modules, marks that its exports must be dynamically accessible.
// import * as m from './module.special';
// console.log( m[ unknownValue ] );
mark(): void;
}
interface Module extends Id {
id: string; // the module id
exports: Scope<Id>; // a scope in which to lookup the exported identifiers
// Returns two StringSets of which modules this module depends on, strongly and weakly.
consolidateDependencies(): Dependencies;
// The `toExport` is a map from deconflicted name to an assignable,
// likewise readable, expression e.g. `{ '_a': 'exports.a' }`.
// The `direct` flag indicates whether imports from external modules can be
// accessed directly, or if they must be a member expression.
// e.g. `path.resolve`.
render( toExport: StringMap<string>, direct: boolean ): string;
}
// Other, implicit types...
interface Dependencies {
strongDependencies: StringSet;
weakDependencies: StringSet;
}
interface StringMap<T> {
[ key: string ]: T;
}
from rollup.
No, I was thinking of something much more simple – supplying the (JavaScript) source code of a module without it being loaded from disk, e.g. in a browser setting. At the moment it's done like this but it could be more declarative (this is in fact made easier by #108, since someone could have a custom loader but still take advantage of a default loader that inspected e.g. options.modules
).
I think we'd make life for our future selves difficult if we tried to make modules extensible like that – it'd be highly complex and restrict our future freedom of movement. Ultimately, everything has to get turned to JavaScript anyway, so I reckon a better route would be to improve the transformation process (i.e. #107).
from rollup.
Perhaps you're right. I might have gotten stuck on that idea of being able include a handpicked set of static data...
from rollup.
Would be nice to be able to feed in modules with lists of dependencies and ASTs. Most of the overhead in production-oriented build tooling seems to come down to every tool having to re-parse large amounts of the tree.
If rollup exposed such an API (apologies if it does already) it would make it a lot more viable to include with other build tools.
from rollup.
I'm going to close this issue now as it's rather out of date – loading modules from memory is trivial with plugins
from rollup.
Related Issues (20)
- 4.16.4 throws Cannot find module @rollup/rollup-darwin-arm64 error MODULE_NOT_FOUND in Ember Embroider app HOT 4
- Node 16 not supported any longer, can't run more modern Node's either HOT 5
- Provide a mechanism to build manualChunks which can be reused across multiple outputs.
- Upgrade from vite 4 to vite 5 crashes in rollup with maximum call stack exceeded HOT 2
- function parameter tracking does not handle spread syntax in arguments correctly HOT 3
- top level return for IIFEs HOT 2
- Function body being mistakenly optimized away HOT 3
- After Babel starts runtime and rolls up preserveModules=true, it will result in an extra layer of output structure HOT 5
- I have a query about the rollup build process with export classes as opposed to export functions HOT 3
- Unknown Fatal Error if code is not an int
- Error: 'default' is not exported by node_modules/interactjs/dist/interact.min.js,
- Don't create dynamic import objects when never used
- Provide original name of exports in output bundle
- Node.JS 22.2.0 rollup 4.18.0 hits `[!] SyntaxError: Unexpected identifier 'assert'` error HOT 1
- React component wont render
- How to configure the .scss file under the style folder to generate a .css file in dist/style/ after building?
- Does not support BSD, not sure why, but it should be easy to port. HOT 2
- Declaring `sideEffects` causes Rollup to drop code with side effects HOT 2
- How to named export from CommonJS module with rollup?
- Packaging vue components, it seems that typescript code is not recognized
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rollup.