2015-09-05 61 views
2

我正忙着使用ASP.NET 5并使用gulp。我在我的package.json文件中添加了angularjs和angular-route,它们将文件存储在Dependencies-> NPM中。我将它添加到我的gulpfile.js文件中,认为它会复制正确的JS文件。它确实复制了这些文件,但它也使该项目崩溃。我不得不手动进入lib文件夹并删除所有添加的gulp。从NPM文件夹复制目标文件夹中的文件的正确方法是什么?我希望能够从Task Runner中运行任务。将文件复制到目的地的合适方式使用gulp

我假设这是不正确的:(这是我跑)

gulp.task("copyJs", function() { 
    return gulp.src('./node_modules/**/*.js')   
     .pipe(gulp.dest('./wwwroot/lib/')) 
}); 

回答

0

有很多方法可以做到这一点,但良好简单的方法之一,我发现是这样的:http://www.hanselman.com/blog/ControlHowYourBowerPackagesAreInstalledWithAGulpfileInASPNET5.aspx

哪些更新bowerrc文件以及此更新后的所有内容更有意义。

更新.BOWERRC和PROJECT.JSON

在项目的根是一个.bowerrc文件。它看起来像这样:

> { "directory": "wwwroot/lib" } Change it to something like this, and 
> delete your actual wwwroot/lib folder. 
> 
> { "directory": "bower_components" } EXCLUDE YOUR SOURCE BOWER FOLDER 
> FROM YOUR PROJECT.JSON 

您也想进入你的project.json文件ASP.NET 5和 确保您的源文件夹bower_components从 项目及排除任何包装和出版过程。

> "exclude": [ 
>  "wwwroot", 
>  "node_modules", 
>  "bower_components" ], 

更新GULPFILE.JS

在你gulpfile,确保路径中存在的路径。有 完全其他方式来做到这一点,包括有吞咽安装凉亭和 找出路径。只要结果是生产准备就绪.js 结束在您的wwwroot准备好提供给客户,这取决于您多么复杂,只要您希望 gulp文件得到。此外, 还包含一个lib或目标,您的结果JavaScript将被复制到 。可以是脚本,可以是js,可以像我一样处于lib状态。

变种路径= { 根目录: “./” + project.webroot + “/”, 亭子: “./bower_components/”, LIB: “./” + project.webroot +“/ LIB/“};添加一个复制任务到你的领域

现在打开你的Gulpfile并记下所有任务。您将添加一个 复制任务,以仅复制想要与您的 网络应用程序部署的文件。

下面是一个例子复制任务:

> gulp.task("copy", ["clean"], function() { 
>  var bower = { 
>   "bootstrap": "bootstrap/dist/**/*.{js,map,css,ttf,svg,woff,eot}", 
>   "bootstrap-touch-carousel": "bootstrap-touch-carousel/dist/**/*.{js,css}", 
>   "hammer.js": "hammer.js/hammer*.{js,map}", 
>   "jquery": "jquery/jquery*.{js,map}", 
>   "jquery-validation": "jquery-validation/jquery.validate.js", 
>   "jquery-validation-unobtrusive": "jquery-validation-unobtrusive/jquery.validate.unobtrusive.js" 
>  } 
> 
>  for (var destinationDir in bower) { 
>   gulp.src(paths.bower + bower[destinationDir]) 
>   .pipe(gulp.dest(paths.lib + destinationDir)); 
>  } }); 

请注意,这是一个很简单,很明确的复印任务。其他 可能只是复制或多或少,甚至使用通配符通配符。 这是给你的。问题的关键是,如果你没有在ASP.NET 5或在你的web应用程序的常规构建流动喜欢一个行为,你有更多的 权力比以往任何时候。

右键单击Solution Explorer中的鲍尔节点和“恢复 包。”你也可以这样做在命令行,还是让它 在构建时发生。

查看这个简化的屏幕截图,您可以看到〜/ bower_components文件夹下的依赖关系的凉亭 。当 gulpfile运行复制任务只是 我想要的部分被移动到〜/ wwwroot的/ lib目录/文件夹**。

3

*我认为,在gulp.dest('./wwwroot/lib/')'/'可能是问题的原因,请尝试gulp.dest('./wwwroot/lib')代替。

这是一口流程我对角2使用与Asp.Net 5.

var gulp = require("gulp"), 
    merge = require("merge-stream"), 
    rimraf = require("rimraf"); 

var paths = { 
    webroot: "./wwwroot/", 
    node_modules: "./node_modules/" 
}; 

paths.libDest = paths.webroot + "lib/"; 

gulp.task("clean:libs", function (cb) { 
    rimraf(paths.libDest, cb); 
}); 

gulp.task("copy:libs", ["clean:libs"], function() { 
    var angular2 = gulp.src(paths.node_modules + "angular2/bundles/**/*.js") 
     .pipe(gulp.dest(paths.libDest + "angular2")); 

    var es6_shim = gulp.src([ 
      paths.node_modules + "es6-shim/*.js", 
      "!**/Gruntfile.js"]) 
     .pipe(gulp.dest(paths.libDest + "es6-shim")); 

    var systemjs = gulp.src(paths.node_modules + "systemjs/dist/*.js") 
     .pipe(gulp.dest(paths.libDest + "systemjs")); 

    var rxjs = gulp.src(paths.node_modules + "rxjs/bundles/**/*.js") 
     .pipe(gulp.dest(paths.libDest + "rxjs")); 

    return merge(angular2, es6_shim, systemjs, rxjs); 
}); 
相关问题