Created
April 11, 2017 11:08
-
-
Save khusamov/cb9e97894c86762014c18c1eacac1fb1 to your computer and use it in GitHub Desktop.
Модуль для добавления статических файлов из подключенных модулей (например jQuery, Bootstrap и т.п.).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Модуль для добавления статических файлов из подключенных модулей (например 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