웹팩 원본의 NodeEnvironmentPlugin 모듈 총람 분석(6)
// ,new Compiler
compiler = new Compiler(options.context);
// options
compiler.options = options;
new NodeEnvironmentPlugin().apply(compiler);
compiler가 너무 복잡해서 NodeEnvironmentPlugin을 먼저 볼게요.
const NodeWatchFileSystem = require("./NodeWatchFileSystem");
const NodeOutputFileSystem = require("./NodeOutputFileSystem");
const NodeJsInputFileSystem = require("enhanced-resolve/lib/NodeJsInputFileSystem");
const CachedInputFileSystem = require("enhanced-resolve/lib/CachedInputFileSystem");
class NodeEnvironmentPlugin {
apply(compiler) {
//
compiler.inputFileSystem = new CachedInputFileSystem(
new NodeJsInputFileSystem(),
60000
);
//
const inputFileSystem = compiler.inputFileSystem;
// , compiler
compiler.outputFileSystem = new NodeOutputFileSystem();
// , , compiler
compiler.watchFileSystem = new NodeWatchFileSystem(
compiler.inputFileSystem
);
// before-run
compiler.hooks.beforeRun.tap("NodeEnvironmentPlugin", compiler => {
if (compiler.inputFileSystem === inputFileSystem) inputFileSystem.purge();
});
}
}
module.exports = NodeEnvironmentPlugin;
플러그인 NodeJsInputFileSystem을 엽니다.js
"use strict";
const fs = require("graceful-fs");
class NodeJsInputFileSystem {
//
readdir(path, callback) {
fs.readdir(path, (err, files) => {
callback(err, files && files.map(file => {
// NFC
return file.normalize ? file.normalize("NFC") : file;
}));
});
}
//
readdirSync(path) {
const files = fs.readdirSync(path);
return files && files.map(file => {
return file.normalize ? file.normalize("NFC") : file;
});
}
}
const fsMethods = [
"stat",
"statSync",
"readFile",
"readFileSync",
"readlink",
"readlinkSync"
];
// fs
for(const key of fsMethods) {
Object.defineProperty(NodeJsInputFileSystem.prototype, key, {
configurable: true,
writable: true,
value: fs[key].bind(fs)
});
}
module.exports = NodeJsInputFileSystem;
graceful-fs는 node 원생 fs를 한 겹 봉하여 더욱 우아하게 한다
전체적으로 보면 Node Environment Plugin 이 모듈은 파일을 처리하고 다시 node를 봉인한 것이다.js는 fs 모듈을 처리했습니다. 파일의 입력, 출력, 캐시, 감청...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.