The content of this section is derived from the content of the following links and is subject to the CC BY 4.0 license.
The following contents can be assumed to be the result of modifications and deletions based on the original contents if not specifically stated.
The loader context represents the properties that are available inside of a loader assigned to the this
property.
Add the directory as a dependency for the loader results so that any changes to the files in the directory can be listened to.
For example, adding src/static
as a dependency. When the files in the src/static
directory change, it will trigger a rebuild.
Add a file as a dependency on the loader results so that any changes to them can be listened to. For example, sass-loader
, less-loader
use this trick to recompile when the imported style files change.
Add a currently non-existent file as a dependency of the loader result, so that its creation and any changes can be listened. For example, when a new file is created at that path, it will trigger a rebuild.
() => LoaderContextCallback
Tells Rspack that this loader will be called asynchronously. Returns this.callback.
A function that sets the cacheable flag.
By default, the processing results of the loader are marked as cacheable. Calling this method and passing false
turns off the loader's ability to cache processing results.
A function that can be called synchronously or asynchronously in order to return multiple results. The expected arguments are:
Error
or null
, which marks the current module as a compilation failure.string
or Buffer
, which indicates the contents of the file after the module has been processed by the loader.In case this function is called, you should return undefined
to avoid ambiguous loader results.
The value passed to this.callback
will be passed to the next loader in the chain.
The sourceMap
and meta
parameters are optional. If they are not passed, the next loader will not receive them.
Removes all dependencies of the loader result.
string | null
The directory path of the currently processed module, which changes with the location of each processed module.
For example, if the loader is processing /project/src/components/Button.js
, then the value of this.context
would be /project/src/components
.
If the module being processed is not from the file system, such as a virtual module, then the value of this.context
is null
.
number
The index in the loaders array of the current loader.
unknown
A data object shared between the pitch and the normal phase.
Alias of this.addDependency().
Emit an error. Unlike throw
and this.callback(err)
in the loader, it does not mark the current module as a compilation failure, it just adds an error to Rspack's Compilation and displays it on the command line at the end of this compilation.
Emit a warning.
Emit a new file. This method allows you to create new files during the loader execution.
InputFileSystem
Access to the compilation
object's inputFileSystem
property.
Get the options passed in by the loader's user.
For example:
In my-loader.js
get the options passed in:
In TypeScript, you can set the options type through the generic of LoaderContext
.
The parameter schema
is optional and will not be used in Rspack.
To provide the best performance, Rspack does not perform the schema validation. If your loader requires schema validation, please call scheme-utils or other schema validation libraries.
Create a resolver like this.resolve
.
boolean
Whether HMR is enabled.
Compile and execute a module at the build time. This is an alternative lightweight solution for the child compiler.
importModule
will return a Promise if no callback is provided.
Or you can pass a callback to it.
string | OptionsType
The value depends on the loader configuration:
this.query
will point to that object.?
.string
The module specifier string after being resolved.
For example, if a resource.js
is processed by loader1.js
and loader2.js
, the value of this.request
will be /path/to/loader1.js!/path/to/loader2.js!/path/to/resource.js
.
Resolve a module specifier.
context
must be the absolute path to a directory. This directory is used as the starting location for resolving.request
is the module specifier to be resolved.callback
is a callback function that gives the resolved path.Mode
The value of mode
is read when Rspack is run.
The possible values are: 'production'
, 'development'
, 'none'
Target
The current compilation target. Passed from target
configuration options.
Access to the following utilities.
absolutify
: Return a new request string using absolute paths when possible.contextify
: Return a new request string avoiding absolute paths when possible.createHash
: Return a new Hash object from provided hash function.string
The path string of the current module. For example '/abc/resource.js?query#hash'
.
string
The path string of the current module, excluding the query and fragment parameters. For example '/abc/resource.js?query#hash'
in '/abc/resource.js'
.
string
The query parameter for the path string of the current module. For example '?query'
in '/abc/resource.js?query#hash'
.
string
The fragment parameter of the current module's path string. For example '#hash'
in '/abc/resource.js?query#hash'
.
string
The base path configured in Rspack config via context.
boolean
Tells if source map should be generated.
Since generating source maps can be an expensive task, you should check if source maps are actually requested.
Get the logger of this compilation, through which messages can be logged.
number
The version number of the loader API. Currently 2.
This is useful for providing backwards compatibility. Using the version you can specify custom logic or fallbacks for breaking changes.
Please note that using internal Rspack properties like this._compiler
and this._compilation
will cause your loader to lose its independence.
Ideally, loaders should focus on file transformation logic, with deterministic output for given input, without depending on Rspack's internal state. Relying on these internal objects introduces unpredictable behavior, making testing and maintenance more difficult.
Therefore, it's recommended to consider using these properties only when there are no other alternatives.
Compiler
Access to the current Compiler object of Rspack.
Compilation
Access to the current Compilation object of Rspack.