npm-管理分销供应商

npm-管理分销供应商,npm,gulp,package,vendors,Npm,Gulp,Package,Vendors,我最近在玩Gulp.js&npm,很棒。然而,我并不真正理解npm作为软件包管理器的想法,因为它将被推到dist 让我们举个例子 我想下载最新的jquery、bootstrap和font-awesome,这样我就可以将它们包含到我的项目中。我可以简单地从他们的网站上下载它们,并获得要包含的文件。另一个选项似乎是数据包管理器,即NPM 然而,由于gulp等其他软件包的原因,我的node_模块目录非常庞大,而且它根本没有嵌套。将所选软件包移动到另一目录的最简单方法是什么?例如src/vendors/

我最近在玩Gulp.js&npm,很棒。然而,我并不真正理解npm作为软件包管理器的想法,因为它将被推到dist

让我们举个例子

我想下载最新的jquery、bootstrap和font-awesome,这样我就可以将它们包含到我的项目中。我可以简单地从他们的网站上下载它们,并获得要包含的文件。另一个选项似乎是数据包管理器,即NPM

然而,由于gulp等其他软件包的原因,我的node_模块目录非常庞大,而且它根本没有嵌套。将所选软件包移动到另一目录的最简单方法是什么?例如
src/vendors/

我试图通过简单地从
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'
    }
}

是否有更快和/或更好的选项?

无需明确指定每个供应商库的源目录和目标目录

记住,gulp只是JavaScript。这意味着您可以使用循环、数组和JavaScript提供的任何其他内容

在您的例子中,您可以简单地维护一个供应商文件夹名称列表,遍历该列表并为每个文件夹构造一个流。然后使用合并流:

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(/\/.*/, '')));
  }));
});
上面唯一棘手的部分是正确地计算出目标目录。我们希望
node\u modules/jquery/dist
中的所有内容都在
src/resources/vendors/jquery
中结束,而不是在
src/resources/vendors/jquery/dist
中结束,因此我们必须使用正则表达式除去第一个
/
之后的所有内容

现在,安装新库时,只需将其添加到
供应商
阵列中,然后再次运行该任务