You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.5 KiB
82 lines
2.5 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = setupWriteToDisk;
|
|
|
|
var _fs = _interopRequireDefault(require("fs"));
|
|
|
|
var _path = _interopRequireDefault(require("path"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function setupWriteToDisk(context) {
|
|
const compilers = context.compiler.compilers || [context.compiler];
|
|
|
|
for (const compiler of compilers) {
|
|
compiler.hooks.emit.tap("DevMiddleware", compilation => {
|
|
if (compiler.hasWebpackDevMiddlewareAssetEmittedCallback) {
|
|
return;
|
|
}
|
|
|
|
compiler.hooks.assetEmitted.tapAsync("DevMiddleware", (file, info, callback) => {
|
|
let targetPath = null;
|
|
let content = null; // webpack@5
|
|
|
|
if (info.compilation) {
|
|
({
|
|
targetPath,
|
|
content
|
|
} = info);
|
|
} else {
|
|
let targetFile = file;
|
|
const queryStringIdx = targetFile.indexOf("?");
|
|
|
|
if (queryStringIdx >= 0) {
|
|
targetFile = targetFile.substr(0, queryStringIdx);
|
|
}
|
|
|
|
let {
|
|
outputPath
|
|
} = compiler;
|
|
outputPath = compilation.getPath(outputPath, {});
|
|
content = info;
|
|
targetPath = _path.default.join(outputPath, targetFile);
|
|
}
|
|
|
|
const {
|
|
writeToDisk: filter
|
|
} = context.options;
|
|
const allowWrite = filter && typeof filter === "function" ? filter(targetPath) : true;
|
|
|
|
if (!allowWrite) {
|
|
return callback();
|
|
}
|
|
|
|
const dir = _path.default.dirname(targetPath);
|
|
|
|
const name = compiler.options.name ? `Child "${compiler.options.name}": ` : "";
|
|
return _fs.default.mkdir(dir, {
|
|
recursive: true
|
|
}, mkdirError => {
|
|
if (mkdirError) {
|
|
context.logger.error(`${name}Unable to write "${dir}" directory to disk:\n${mkdirError}`);
|
|
return callback(mkdirError);
|
|
}
|
|
|
|
return _fs.default.writeFile(targetPath, content, writeFileError => {
|
|
if (writeFileError) {
|
|
context.logger.error(`${name}Unable to write "${targetPath}" asset to disk:\n${writeFileError}`);
|
|
return callback(writeFileError);
|
|
}
|
|
|
|
context.logger.log(`${name}Asset written to disk: "${targetPath}"`);
|
|
return callback();
|
|
});
|
|
});
|
|
});
|
|
compiler.hasWebpackDevMiddlewareAssetEmittedCallback = true;
|
|
});
|
|
}
|
|
}
|