我有一个angular2应用程序在本地工作正常,但无法在构建服务器上构建。我不想检查node_modules目录中的29,000个文件(我们进行本地构建,测试构建和生成构建)。
我尝试在构建服务器上的package.json文件中全局安装所有项目,作为TFS后台作业代理所有者。我仍然得到"找不到模块"错误。
我将Gulp构建到编译的单个JS文件中,我应该禁用打字稿编译并只检入该JS文件(在保存时不会有本地编译,并且必须更改为gulp编译和文件侦听器)。只是检查JS文件的痛苦部分,gulp没有检查文件,所以即使它得到更新,VS也不知道它已被更改,并且很难结账并重新投入并做一些小事更改VS检测到实际签入并迁移到下一个版本。
我知道TFS 2015有一个新的构建代理,是否能以某种方式解决这个问题?
答案 0 :(得分:0)
对于TFS2013,您可以在PRE-BUILD EVENTS中使用相应的命令,也可以使用自定义目标扩展.crproj。手动编辑底部的.csproj文件并添加如下内容
<PropertyGroup>
<CompileDependsOn>
$(CompileDependsOn);
GulpBuild;
</CompileDependsOn>
</PropertyGroup>
<Target Name="GulpBuild" DependsOnTargets="CompileTypeScript">
<Exec Command="npm install" />
<Exec Command="gulp" />
</Target>
更多详情请参阅此博客:INTEGRATING GULP INTO YOUR TFS BUILDS AND WEB DEPLOY
此外,对于 TFS 2015 (vNext构建系统),您只需在构建定义中添加npm task运行“npm install”命令,即可在VS之前安装npm软件包建立。
注意:请记住将“工作目录”设置为放置npm配置文件“package.json”的项目文件夹。
答案 1 :(得分:0)
我只是想发布我最终做的事情,以防它帮助别人。我不想检查所有节点模块,我不想下载或管理构建服务器。所以,我使用gulp将当前所有内容捆绑到两个js文件(库和应用程序)中。使用gulp-tfs-commander,然后我可以确保一直运行,生成的JS文件将结帐,所以我的下一个签入将只包括那些没有我参与的JS文件。
Gulp文件:
var gulp = require('gulp')
var concat = require('gulp-concat')
var gulpTfs = require('gulp-tfs-commander');
var Builder = require('systemjs-builder');
var uglify = require('gulp-uglify');
gulp.task('bundle', function () {
var builder = new Builder('/app/', 'systemjs.config.js');
return builder
.buildStatic('/app/main.js', 'scripts/bundled/app-bundle.js', { minify: false, mangle: false, sourceMaps: true })
.then(function () {
gulp.src([
'Scripts/bundled/app-bundle.js'
])
.pipe(gulpTfs({ command: 'edit', params: { lock: 'none' } }))
console.log('Build complete');
})
.catch(function (err) {
console.log('Build error');
console.log(err);
});
});
gulp.task('bundle_library', function () {
gulp.src([
'node_modules/es6-shim/es6-shim.min.js',
'node_modules/zone.js/dist/zone.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js',
'node_modules/ng2-bootstrap/ng2-bootstrap.min.js'
])
.pipe(concat('nm-library.js'))
.pipe(uglify())
.pipe(gulp.dest('Scripts/bundled/'))
.pipe(gulpTfs({ command: 'edit', params: { lock: 'none' } }))
});