fic*_*cus 2 package vendors npm gulp
我最近在玩 Gulp.js 和 npm,很棒。但是,我并没有真正理解将 npm 用作将被推送到 dist 的包的包管理器的想法。
让我们举一个例子。
我想下载最新的 jquery、bootstrap 和 font-awesome,以便我可以将它们包含到我的项目中。我可以简单地从他们的网站下载它们并获取要包含的文件。另一种选择似乎是数据包管理器,即 NPM。
但是,由于 gulp 等其他包,我的 node_modules 目录很大,并且根本没有嵌套。将选定的包移动到另一个目录的最简单方法是什么 - 例如src/vendors/
我试图通过 gulp 任务简单地从node_modules指定的目录复制指定的文件并将它们移动到指定的目录来实现这一点,但从长远来看,它与手动复制文件几乎相同,因为我不仅要指定输入目录,还要指定输出每个包的目录。
我目前的解决方案:
gulp.task('vendors', function() {
var jquery = gulp.src(vendors.src.jquery)
.pipe(gulp.dest(vendors.dist.jquery));
var bootstrap = gulp.src(vendors.src.bootstrap)
.pipe(gulp.dest(vendors.dist.bootstrap));
return merge(jquery, bootstrap);
});
vendors = {
src: {
jquery: 'node_modules/jquery/dist/**/*',
bootstrap: 'node_modules/bootstrap/dist/**/*'
},
dist: {
jquery: 'src/resources/vendors/jquery',
bootstrap: 'src/resources/vendors/bootstrap'
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更快和/或更好的选择?
无需为每个供应商库明确指定源目录和目标目录。
请记住,gulp 只是 JavaScript。这意味着您可以使用循环、数组以及 JavaScript 提供的任何其他功能。
在您的情况下,您可以简单地维护供应商文件夹名称列表,遍历该列表并为每个文件夹构建一个流。然后用于merge-stream合并流:
var gulp = require('gulp');
var merge = require('merge-stream');
var vendors = ['jquery/dist', 'bootstrap/dist'];
gulp.task('vendors', function() {
return merge(vendors.map(function(vendor) {
return gulp.src('node_modules/' + vendor + '/**/*')
.pipe(gulp.dest('src/resources/vendors/' + vendor.replace(/\/.*/, '')));
}));
});
Run Code Online (Sandbox Code Playgroud)
上面唯一棘手的部分是正确找出目标目录。我们希望所有 in 都node_modules/jquery/dist以 insrc/resources/vendors/jquery而不是 in结束src/resources/vendors/jquery/dist,因此我们必须在第一次/使用正则表达式之后剥离所有内容。
现在,当您安装新库时,您只需将其添加到vendors阵列中并再次运行该任务即可。
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |