Webpack Virtual Modules is a webpack plugin that lets you create, modify, and delete in-memory files in a way that webpack treats them as if they were physically presented in the file system.
Webpack 虚拟模块
Webpack 虚拟模块 是一款插件,它能够为使用 webpack 创建的 JavaScript 构建动态生成内存中的虚拟模块。当创建一个虚拟模块时,所有指向模块文件名的父级虚拟目录也会相应创建。此插件支持监视模式,即对虚拟模块的任何写入操作,webpack 都会将其视为存储在磁盘上的实际文件发生了变化。
安装
使用 NPM 或 Yarn 将 Webpack 虚拟模块安装为开发依赖项:
# with NPM
npm install webpack-virtual-modules --save-dev
# with Yarn
yarn add webpack-virtual-modules --dev
使用说明
您可以搭配 webpack 5、4 和 3 使用 Webpack 虚拟模块。以下示例展示了如何在 webpack 5 或 4 中使用。若要在 webpack 3 中使用我们的插件,请查阅专门的文档:
- [Webpack 虚拟模块与 Webpack 3 的使用]
生成静态虚拟模块
在 webpack 配置文件中引入该插件,然后在 webpack 配置对象的 plugins 数组中创建并添加虚拟模块:
var VirtualModulesPlugin = require('webpack-virtual-modules');
var virtualModules = new VirtualModulesPlugin({
'node_modules/module-foo.js': 'module.exports = { foo: "foo" };',
'node_modules/module-bar.js': 'module.exports = { bar: "bar" };'
});
module.exports = {
// ...
plugins: [
virtualModules
]
};
您现在可以在应用的任何地方导入您的虚拟模块并使用它们:
var moduleFoo = require('module-foo');
// You can now use moduleFoo
console.log(moduleFoo.foo);
动态生成虚拟模块
您可以使用 Webpack 虚拟模块功能动态地生成虚拟模块。
以下是一个动态生成模块的示例。您需要做的只是使用插件创建新的虚拟模块,并将其添加到 plugins 数组中。之后,您需要添加一个 webpack 钩子。关于使用钩子,请参阅 [webpack 编译器钩子文档]。
var webpack = require('webpack');
var VirtualModulesPlugin = require('webpack-virtual-modules');
// Create an empty set of virtual modules
const virtualModules = new VirtualModulesPlugin();
var compiler = webpack({
// ...
plugins: [
virtualModules
]
});
compiler.hooks.compilation.tap('MyPlugin', function(compilation) {
virtualModules.writeModule('node_modules/module-foo.js', '');
});
compiler.watch();
在其他模块或 Webpack 插件中,您可以向 module-foo 模块写入所需的任何内容。在此写入操作之后,Webpack 将“发现”module-foo.js 发生了变化,并将重新开始编译。
virtualModules.writeModule(
'node_modules/module-foo.js',
'module.exports = { foo: "foo" };'
);
更多示例
- [使用 Webpack 5 的 Swagger 和 JSDoc 示例]
- [使用 Webpack 4 的 Swagger 和 JSDoc 示例]
- [使用 Webpack 3 的 Swagger 和 JSDoc 示例]
API 参考文档
- [API 参考文档]
灵感来源
本项目受到 virtual-module-webpack-plugin 的启发。
贡献指南
本项目使用 nari 包管理器,以实现不依赖于锁定文件的再现性构建,它使用 package.json 中的 lockTime 字段替代。
要安装 nari,执行以下命令:
npm i -g nari
然后使用 nari 安装项目。
要运行项目脚本,请使用 nari 脚本名,例如 nari test 以运行单元测试。
许可协议
版权所有 © 2017 SysGears (Cyprus) Limited。此源代码遵循 MIT 许可。