lilacs
Version:
A web frontend building tool for teamwork, with automaticly compiling, merging, minifying, syncing files to server, supporting distributed servers, ensuring css or html files' inline reference with correct absolute path, and more.
71 lines (57 loc) • 1.84 kB
JavaScript
const fs = require('fs');
const path = require('path');
const pathUtil = require('./path');
const getFilePathFromPackage = require('./get_file_path_from_package');
const fileUtil = require('../util/file');
let response = (res, realFilePath, isJs) => {
let fileStat = fs.statSync(realFilePath);
res.writeHead(200, {
'Content-Type': isJs ? 'application/javascript' : 'text/css',
'Content-Length': fileStat.size
});
let readStream = fs.createReadStream(realFilePath);
readStream.pipe(res);
};
module.exports = (req, res, next) => {
let filePath = req.url.split('?')[0];
// only do to js/css file
if (filePath.slice(-3) !== '.js' && filePath.slice(-4) !== '.css') {
next();
return;
}
const projectConfig = require('../project_config');
// file exist in projectConfig.basePaths.webRoot
if (fileUtil.fileExist(path.join(projectConfig.basePaths.webRoot, filePath))) {
next();
return;
}
let isJs = !1;
let pureFilePath = '';
// js
if (filePath.slice(-3) === '.js') {
isJs = !0;
pureFilePath = filePath.slice(0, -3);
}
// css
else {
isJs = !1;
pureFilePath = filePath.slice(0, -4);
}
// not exist
if (!pureFilePath) {
next();
return;
}
// do not exist requireJsConfig
if (isJs && !projectConfig.requireJsConfig || !isJs && !projectConfig.inCssConfig) {
next();
return;
}
// not exist, try node_modules
let module = pathUtil.replaceBackSlash(path.relative(
isJs ? projectConfig.requireJsConfig.baseUrl : projectConfig.inCssConfig.baseUrl, pureFilePath
));
let realFilePath = getFilePathFromPackage(module, isJs);
if (realFilePath) response(res, realFilePath, isJs);
else next();
};