Skip to content

Instantly share code, notes, and snippets.

@khusamov
Created April 11, 2017 11:08
Show Gist options
  • Save khusamov/cb9e97894c86762014c18c1eacac1fb1 to your computer and use it in GitHub Desktop.
Save khusamov/cb9e97894c86762014c18c1eacac1fb1 to your computer and use it in GitHub Desktop.
Модуль для добавления статических файлов из подключенных модулей (например jQuery, Bootstrap и т.п.).
/**
* Модуль для добавления статических файлов из подключенных модулей (например jQuery, Bootstrap и т.п.).
*
* Пример использования:
* app.usePackages(["jquery", "bootstrap"]);
* script(src="/package/jquery/jquery.min.js")
* link(href="/package/bootstrap/css/bootstrap.min.css" rel="stylesheet")
* script(src="/package/bootstrap/js/bootstrap.min.js")
*
* Возможности:
* - автоматически распознает каталог dist (если его нет, то подключает корень модуля).
*
*/
const express = require("express");
const path = require("path");
const fs = require("fs");
let defaultPrefixPath = "/package";
function checkDirectoryExistsSync(filepath) {
let isExists = true;
try{
fs.accessSync(filepath, fs.F_OK);
} catch(e) {
isExists = false;
}
return isExists && fs.statSync(filepath).isDirectory();
}
function getPackageDirname(packageName) {
return path.dirname(require.resolve(`${packageName}/package.json`));
}
function getPackageStatic(packageName, dist) {
let packageDirname = getPackageDirname(packageName);
const packageDirnameDist = dist ? dist : path.join(packageDirname, "dist");
packageDirname = checkDirectoryExistsSync(packageDirnameDist) ? packageDirnameDist : packageDirname;
return express.static(packageDirname);
}
/**
* app.usePackage(packageName);
* app.usePackage(path, packageName);
*/
express.application.usePackage = function(uri, packageName, dist) {
this.use(uri, getPackageStatic(packageName, dist));
return this;
};
express.application.usePackages = function(packages) {
packages.map(i => typeof i == "object" ? i : {
path: path.join(defaultPrefixPath, i),
name: i
})
.forEach(item => {
this.usePackage(item.path, item.name, item.dist);
});
return this;
};
module.exports = function(newDefaultPrefixPath) {
defaultPrefixPath = newDefaultPrefixPath;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment