Фронтенд проекта крутится на нодовском локальном сервере и собирается при помощи gulp. Весь фронтенед выдран из проекта на rails и переписан под ноду.
Есть две папки - src и dist. В src содержатся исходники. Cервер обслуживает файлы из папки dist.
В папке js есть один главный файл, application.js, в который должны включаться все остальные файлы при помощи модуля gulp-include, поэтому там содержатся только директивы:
//= stub head
//= require jquery
//= require_self
// plugins
//= require_tree ./application/plugins
//= require application/grill-init
//= require application/error-views
//= require application/local-chrome-info
//= require application/footer
// utils
//= require application/utils/adfox
//= require application/utils/background-styles
//= require application/utils/cookie
//= require application/utils/css-manager
//= require application/utils/disney-user
//= require application/utils/getscript
//= require application/utils/module-background-util
//= require application/utils/module-capabilities
//= require application/utils/pizza-delivery
//= require application/utils/tinycolor
//= require application/utils/title-util
//= require application/utils/tracking
//= require application/utils/yandex-share
//= require application/plugins/scale.animation
//= require moment-with-locales.min
// addons
//= require_tree ./application/addons
// fixins
//= require_tree ./fixins
// components
//= require_tree ./components
Cогласно описанию модуля
https://www.npmjs.com/package/gulp-include, директива require_tree устарела, и сам файл содержит синтаксически ошибки(лишние пробелы и т.д.)
Поэтому таск по скриптам в gulpfile выглядит так:
var include = require("gulp-include");
var rename = require('gulp-rename');
gulp.task("scripts", function() {
gulp.src(["./src/js/**/*.js", './src/js/**/*.js.erb'])
.pipe(replace(/\/\/= require_tree/g, '\/\/=require_tree'))
.pipe(replace(/\/\/= require /g, '\/\/=require '))
.pipe(replace(/require (\S*)\n/g, 'require $1.js\n'))
.pipe(replace(/require_tree (\S*)\n/g, 'require $1\/\*\*\/\*.js\n'))
//.pipe(gulp.dest("./dist/js/"))
.on('end', function () {
gulp.src(["./dist/js/head.js.erb", "./dist/js/application.js.erb"])
.pipe(include())
.on('error', console.log)
.pipe(rename({extname: '.js'}))
.pipe(gulp.dest("./dist/js/"));
});
});
То есть require_tree должны заменяться require с глобальным путем.
При компиляции gulp выдает следующее:
[17:31:46] Using gulpfile ~/Documents/work/сompany/project/gulpfile.js
[17:31:46] Starting 'scripts'...
[17:31:46] Finished 'scripts' after 17 ms
{ [Error: EISDIR: illegal operation on a directory, read] errno: -21, code: 'EISDIR', syscall: 'read' }
на выходе в dist получаю тот же самый application.js.erb, новый файл application.js не создается.
Удаление и и вставка строк в application.js методом тыка помогли определить, что проблема кроется в том числе и на этапе, когда компилируются директивы с require_tree и еще в чем-то - gulp не может залезть во все директории, то есть он не распознает их как директории. Или же проблема в чем-то другом? Спасибо.