浅析webpack源码之NodeEnvironmentPlugin模块总览(六)
栏目: JavaScript · 发布时间: 6年前
内容简介:进入webpack.jscompiler太复杂我们先看NodeEnvironmentPlugin
进入webpack.js
//传入地址,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 做了一层封装,显得更优雅
总体看来NodeEnvironmentPlugin这个模块就是对文件做了处理,又重新封装了node.js 对fs模块做了以一些处理,文件的输入,输出,缓存,监听...
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社群营销与运营/互联网+新媒体营销规划丛书
秦阳//秋叶|总主编:秋叶 / 人民邮电出版社 / 2017-5 / 45.00元
《社群营销与运营》共分6章。第1章重点介绍了社群营销的起因、概念、构成、价值和评估模型,引导读者全面认识社群以及社群营销;第2章介绍了如何从无到有、从小到大建设一个社群的手法和注意事项;第3章重点介绍维持社群活跃度的各种技巧;第4章介绍了组织一场社群线下活动五个阶段的执行方案;第5章介绍了如何从无到有、由弱到强地构建社群运营团队;第6章介绍如何正确看待社群商业变现以及社群商业变现的三大模式和四个基......一起来看看 《社群营销与运营/互联网+新媒体营销规划丛书》 这本书的介绍吧!