Browserify Require All Files in Directory
我刚开始浏览(和一般的javascript构建系统),已经到了一个我完全困惑的地步。
我有大量的设置来完成我的构建,它一直工作得很好,最近我一直在使用browserify进行捆绑——主要是为了将我的代码分为单独的文件和
我的问题是,我有一个文件夹,里面有一堆我需要在另一个模块中使用的小模块,我试图避免对所有模块的名称进行硬编码。有没有办法要求所有的文件?
我试过使用Bulkify和Folderify,但无法让它们工作。例如,对于Bulkify,安装的包称为Bulkify,位于node_modules文件夹中,但随后它们会告诉您需要Bulk Require,它位于Bulkify包的子节点_modules文件夹中。当我尝试的时候,用一个
在这一点上我感到困惑,因为我不知道为什么这两个安装方向都不工作(也不知道它们是否会帮助我)。我应该在我的档案里用它们吗?或者我可以在我的一个模块中使用它们,它将在浏览期间被调用吗?
如果这有助于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // 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')); }); |
我不知道我在这里做什么。我是要在我的
编辑
我可以在
但是,当我试图要求
1 2 3 4 5 6 7 8 | module.exports = function(type, driver, node) { var propertiesContainer = '#property-container'; var bulk = require('bulk-require'); var mods = bulk(__dirname, ['properties/**/*.js']); } |
Error: Cannot find module 'bulk-require' from '/path/to/my/project/resources/assets/js/report'
编辑2
我可以使用
1 | var properties = require('./properties/*.js', {mode: 'hash', resolve: ['path-reduce', 'strip-ext']}); |
返回一个对象,其中键作为文件名,不带扩展名或路径前缀。
在我的gulpfile.js中,我这样做了:
1 2 3 4 5 6 7 8 9 10 11 12 | 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')); |
这是一项很容易完成的任务。使用fs,您可能只需访问node_modules文件夹就可以动态地同时需要所有依赖项。
1 2 3 4 | var normalizedPath = require("path").join(__dirname,"node_modules/bulkify"); require("fs").readdirSync(normalizedPath).forEach(function(file) { require("./node_modules/bulkify" + file); }); |
关于这个问题的更多答案可以在这里找到
编辑抱歉,对于一般的答案,我有点误解了关于动态要求文件进入browserify的问题。
"需要全局化"似乎是解决问题的一个好方法。
花点时间看看这个答案,并用browserify编译动态需要的模块
我没有用过,但我想江户十一〔0〕会做你想做的。
Am I supposed to be using them in my Gulp file? Or can I use them in one of my modules and it will get called during the Browserify?
是的,是的。
我想要点是这样的:
1 2 3 4 5 | var bulkify = require('bulkify'); browserify(...) .transform(bulkify) // ... |
1 2 3 | var bulk = require('bulk-require'); var a_bunch_of_small_modules = bulk(__dirname, ['somdir/**/*.js']); a_bunch_of_small_modules.somedir.whatever(); |