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"
 | |
| 		)
 | |
| 	]
 | |
| });
 |