web应用程序开发新手。我的问题:我已经设置grunt缩小/丑化javascript。这很好,但我希望服务器:看看是否存在缩小的javascript。如果有,就端上来。如果没有,提供源javascript。
我现在有一个工作的实现,在路由中,检查被缩小的文件是否存在。如果有,它提供索引。玉,其中有布局。里面嵌着玉石。如果不是,它提供index_fallback。Jade,它有layout_fallback。里面嵌着翡翠
路由逻辑:/* GET home page. */
router.get('/', function(req, res) {
if(fs.existsSync(path.join(__dirname + '/../public/' + '/dist/javascripts/global.js'))) {
res.render('index', { title: 'Express' });
} else {
console.log('WARNING!!! Did not find minified global.js file. Using full file.');
console.log('Run `grunt` to construct minified .js files.');
res.render('index_fallback', { title: 'Express' });
}
});
是否有更优雅的方法来做到这一点?维护两倍多的文件,每个文件只有一行差异,这似乎不是一种明智的方法。我可以将变量传递给jade并在jade模板中执行条件吗?我应该在路由器中做任何逻辑吗?
源代码可在这里获得。非常感谢。
编辑:优雅地解决了。参见routes/index.js和views/layout。
我将缓存该文件的路径,而不是每次都检查它是否存在。或者文件的全部内容,除非RAM非常宝贵。然后,只需观察您希望显示首选文件的目录上的变化。
var fileName = "lessPreferredFile.js"
router.get('/file', function (req, res) {
doStuffBasedOn(fileName);
}
fs.watch("directory/of/preferredFile", function (evt, name) {
//If our file gets added, change the fileName to the updated file name
//May also want to check the evt parameter for the correct event type.
//Wouldn't want to change fileName to the name of a file that just got deleted!
if (name === "desiredFileName") fileName = name;
}
注意:我没有测试这个,认为它javascript伪代码,但它是相当接近。还有一些实用程序可以递归地监视目录等,如果你不能指望你正在寻找的文件被放置在特定的目录中。