webpack
Version:
Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.
42 lines (34 loc) • 1.23 kB
JavaScript
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Alexander Akait @alexander-akait
*/
;
const ExternalsPlugin = require("../ExternalsPlugin");
const { coreModules } = require("../node/nodeBuiltins");
/** @typedef {import("../Compiler")} Compiler */
// Deno only resolves node.js core modules through the `node:` specifier, so the
// prefix is baked into the external request for both `import` and `require`.
// Deno's own import protocols are resolved by the runtime, never bundled.
const DENO_PROTOCOLS = /^(?:npm|jsr|https?):/;
class DenoTargetPlugin {
/**
* Applies the plugin by registering its hooks on the compiler.
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
apply(compiler) {
new ExternalsPlugin(
(dependency) =>
dependency.category === "commonjs" ? "node-commonjs" : "module-import",
({ request }, callback) => {
if (!request) return callback();
if (request.startsWith("node:") || DENO_PROTOCOLS.test(request)) {
return callback(null, request);
}
if (coreModules.has(request)) return callback(null, `node:${request}`);
callback();
}
).apply(compiler);
}
}
module.exports = DenoTargetPlugin;