mirror of https://github.com/webpack/webpack.git
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const webpack = require("../../");
|
|
|
|
const routesPath = path.join(__dirname, "./routes");
|
|
|
|
const VERSION = "1.0.0";
|
|
|
|
module.exports = (env = "development") => ({
|
|
mode: env,
|
|
// Just for examples, you can use any target
|
|
target: "node",
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.tsx?$/,
|
|
loader: "ts-loader",
|
|
options: {
|
|
transpileOnly: true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
new webpack.experiments.schemes.VirtualUrlPlugin({
|
|
"my-module": 'export const msg = "from virtual module"',
|
|
"my-async-module": async () => {
|
|
const value = await Promise.resolve("async-value");
|
|
|
|
return `export default "${value}"`;
|
|
},
|
|
"build-info": {
|
|
source() {
|
|
return `export const version = "${VERSION}"`;
|
|
},
|
|
// Re-evaluate this value at each compilation, useful when getting a value from a variable
|
|
version: true
|
|
},
|
|
"my-json-modules": {
|
|
type: ".json",
|
|
source: () => '{"name": "virtual-url-plugin"}'
|
|
},
|
|
// Loaders will work with virtual modules
|
|
"my-typescript-module": {
|
|
type: ".ts",
|
|
source: () => `
|
|
const value: string = "value-from-typescript";
|
|
|
|
export default value;`
|
|
},
|
|
routes: {
|
|
source(loaderContext) {
|
|
// Use `loaderContext.addContextDependency` to monitor the addition or removal of subdirectories in routesPath to trigger the rebuilding of virtual modules.
|
|
// See more - https://webpack.js.org/api/loaders/#the-loader-context
|
|
loaderContext.addContextDependency(routesPath);
|
|
|
|
const files = fs.readdirSync(routesPath);
|
|
|
|
return `export const routes = {${files
|
|
.map(key => `${key.split(".")[0]}: () => import('./routes/${key}')`)
|
|
.join(",\n")}}`;
|
|
}
|
|
},
|
|
"code-from-file": {
|
|
async source(loaderContext) {
|
|
const pathToFile = path.resolve(__dirname, "./code.js");
|
|
|
|
// Will trigger rebuild on changes in the file
|
|
loaderContext.addDependency(pathToFile);
|
|
|
|
const code = await fs.promises.readFile(pathToFile, "utf8");
|
|
|
|
return code;
|
|
}
|
|
}
|
|
}),
|
|
new webpack.experiments.schemes.VirtualUrlPlugin(
|
|
{
|
|
"my-module": `const msg = "from virtual module with custom scheme";
|
|
|
|
export default msg`
|
|
},
|
|
"my-custom-scheme"
|
|
)
|
|
]
|
|
});
|