Я новичок в Browserify (и в системах Javascript build вообще) и достиг точки, в которой я полностью запутался.
У меня есть Gulp настройка для моих сборников, которая всегда работала нормально, и в последнее время я использую Browserify для комплектации - в основном, поэтому я могу разделить свой код на отдельные файлы и require()
их там, где им нужно быть.
Моя проблема в том, что у меня есть папка с кучей небольших модулей, которые мне требуются в другом модуле, и я стараюсь избегать жесткого кодирования имен всех из них. Есть ли способ сделать все файлы?
Я пробовал использовать Bulkify и Folderify, но не могут заставить их работать. Например, с Bulkify установленный пакет называется bulkify и находится в папке node_modules, но затем они говорят вам потребовать bulk-require, который находится в sub node_modules папки большого объема. Когда я это пробую, Browserify дросселирует с ошибкой типа Cannot find module 'bulk-require'...
.
В этот момент я смущен, потому что я понятия не имею, почему инструкции по установке обоих из них не работают (и не помогут ли они мне). Предполагаю ли я использовать их в своем файле Gulp? Или я могу использовать их в одном из моих модулей, и он будет вызван во время браузера?
Вот фрагмент моей задачи сборки для этого, если это помогает:
// Report Builder
gulp.task('script-builder', function() {
// Unminified
// **********************************************************
browserify({entries: './resources/assets/js/report/builder.js'})
.on('error', function (err) { console.log(err); this.emit('end'); })
.bundle()
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(source('builder.js'))
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(buffer())
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(gulp.dest('./public/js/debug'));
// Minified
// **********************************************************
browserify({entries: './resources/assets/js/report/builder.js'})
.on('error', function (err) { console.log(err); this.emit('end'); })
.bundle()
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(source('builder.js'))
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(buffer())
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(ext_replace('.min.js'))
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(uglify())
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(gulp.dest('./public/js/dist'));
});
Я понятия не имею, что я здесь делаю. Мне просто нужно жестко кодировать пути в моих вызовах require()
или есть лучший способ?
ИЗМЕНИТЬ
Я отчетливо вижу bulk-require
в модуле bulkify
node:
Но, когда я пытаюсь потребовать bulk-require
, он задыхается:
module.exports = function(type, driver, node) {
var propertiesContainer = '#property-container';
var bulk = require('bulk-require');
var mods = bulk(__dirname, ['properties/**/*.js']);
}
Ошибка: не удается найти модуль "bulk-require" из "/path/to/my/project/resources/assets/js/report"
РЕДАКТИРОВАТЬ 2
Мне удалось выполнить эту работу, используя пакет require-globify
(https://github.com/capaj/require-globify). В моем javascript я использовал:
var properties = require('./properties/*.js', {mode: 'hash', resolve: ['path-reduce', 'strip-ext']});
Это возвращает объект с ключами как имя файла без расширения или префикса пути.
В моем gulpfile.js я сделал это:
browserify({
entries: './resources/assets/js/report/builder.js',
transform: ['require-globify']
})
.on('error', function (err) { console.log(err); this.emit('end'); })
.bundle()
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(source('builder.js'))
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(buffer())
.on('error', function (err) { console.log(err); this.emit('end'); })
.pipe(gulp.dest('./public/js/debug'));