HowTo: Add Magical Constants to your Javascript Files within concat operation
gulp-concat-util, file post-processing
Sometimes it can be very useful to have magical constants like __FILENAME__ or __LINE__ available within your sourcecode – especially for debugging or in merged files.
Unfortunately, such feature is missing in javascript but it is possible to implement it by yourself using a file-postprocessing filter in your gulp build script.
Thanks to gulp-concat-util, it’s very simple to define such filter which will be applied to each file during the concat task.
The Filter Function#
// gulp-concat-util provides additional functionalities compared to gulp-concat! var concat = require("gulp-concat-util"); // default release build gulp.task('browser-js', ['jsx'], function () { return gulp.src(['Source/Lib/**/*.js']) .pipe(prettyError()) // concat all files .pipe(concat('EnlighterJS.browser.js', { // replace filename constants process: function (src, filePath) { // magic __FILENAME__ constant src = src.replace('__FILENAME__', function (match, offset) { return "'" + path.basename(filePath) + "'" }); // magic __LINE__ constant src = src.replace('__LINE__', function (match, offset) { // count the number of line-breaks return (src.substr(0, offset).match(/\n/g) || []).length + 1; }); return src; } })) });
Usage Example#
Within your sourcefiles, these magical constants will become available
// Throw an Internal Error with the current filename and linenumber // These informations will also be available in clear-text after concat and minimize task! throw new InternalError('Error Message', __FILENAME__, __LINE__);