A grab bag of utilities for spike plugins
Note: This project is in early development, and versioning is a little different. Read this for more details.
Spike uses webpack as its core compiler, but fundamentally behaves a bit differently from webpack, as it's a full static site compiler rather than a javascript bundler. As such, plugins for spike frequently need to make use of a couple specific utilities. In fact, each of these utilities are used in spike's core plugins.
If you are making a spike plugin, check out the documentation below, and one of these functions might be able to save you a bunch of code ๐
npm install spike-util -S
All of the utilities require access to spike/webpack's options
in order to work correctly. As such, the plugins are bundled in a class that must be initialized with the config.
const SpikeUtils = require('spike-util')
// webpack plugin apply function
apply (compiler) {
const util = new SpikeUtils(compiler.options)
}
With it initialized, you can use any of the following functions:
util.addFilesAsWebpackEntries(compilation, files)
- adds one or more files to webpack's pipeline so that it is processed without having to berequire
'd in an entry.util.getOutputPath(path)
- given a relative or absolute path to a file in a spike project, return it's output path relative to the project root.util.removeAssets(compilation, files)
- removes assets from webpack's pipeline so that they are not written as entries.util.resolveRelativeSourcePath(path)
- resolves a relative output path from a spike project to an absolute path to the source file.util.isFileIgnored(file)
- given a path to a file in a spike project, returns a boolean for whether the file is ignored or not.util.runAll(compiler, cb)
- run the given function when webpack's compiler initializes, bound to both therun
andrun-watch
events.
And some static methods:
SpikeUtils.filePathFromLoader(loaderContext)
- passthis
inside a loader and it will return a file object with the absolute and relative paths to the current file being processed.
For more details on any given function, check out the source! I would never say this for any other library, but this is only one simple file, with fairly small functions that are extremely thoroughly documented, so I think it's worth jumping in.
- Details on the license can be found here
- Details on running tests and contributing can be found here