Aurelia建立在VSO托管构建控制器上

时间:2015-05-07 12:43:48

标签: azure-devops aurelia jspm

我正在尝试在VSO托管构建控制器上为Aurelia进行构建。我创建了一个小的PowerShell脚本来运行以下命令

npm install
.node_modules/.bin/jspm cc
.node_modules/.bin/jspm install -y
.node_modules/.bin/gulp build

我确实有AfterBuild目标将jspm_packages和dist文件夹复制到我的_publishedWebsites文件夹。

npm install运行正常,但是当谈到jspm cc时(如果我删除了jspm cc并让它运行jspm install -y),它就无法尝试这个

jspm cc

          Migrating global jspm folder from C:\Users\buildguest\.jspm to C:\Users\buildguest\AppData\Local\.jspm...
          Copying configuration...

     err  Error migrating to new jspm folder
 2>EXEC : error : ENOENT, no such file or directory 'C:\Users\buildguest\.jspm\config' [d:\a\src\WebGUI\OwinAureliaScaffold\OwinAureliaScaffold.csproj]
              at Object.fs.openSync (evalmachine.<anonymous>:427:18)
              at Object.fs.readFileSync (evalmachine.<anonymous>:284:15)
              at Object.<anonymous> (d:\a\src\WebGUI\OwinAureliaScaffold\public\node_modules\jspm\lib\global-config.js:36:24)
              at Module._compile (module.js:456:26)
              at Object.Module._extensions..js (module.js:474:10)
              at Module.load (module.js:356:32)
              at Function.Module._load (module.js:312:12)
              at Module.require (module.js:364:17)
              at require (module.js:380:17)
              at Object.<anonymous> (d:\a\src\WebGUI\OwinAureliaScaffold\public\node_modules\jspm\lib\registry.js:19:20)
     ok   Loader file cache cleared.
     ok   Package cache cleared.

我知道jspm没有全局安装,因为它是一个托管控制器,我无法真正全局安装它。我的问题是,如何在没有全局jspm安装的情况下解决这个问题?是否有解决方法,它不必迁移配置文件?

3 个答案:

答案 0 :(得分:5)

即使您无法在托管构建代理上安装和运行jspm CLI,也可以通过节点本身运行jspm。

首先,确保安装了jspm - 您的powershell脚本所做的事情。或者,您可以使用VSO Build&#34; npm安装任务&#34;,前提是jspm位于您的package.json文件中。 enter image description here

我使用Gulp通过节点执行jspm。我不确定这是否是执行此步骤的最佳方式,但它有效......我使用了VSO&#34; Gulp任务&#34;

enter image description here

以下是gulpfile.js的相关位:

var gulp = require('gulp'),
    exec = require('child_process').exec;

//#region Build Tasks
gulp.task('build:jspm', function (cb) {
    exec("node ./node_modules/jspm/jspm.js install", function(err, stdout, stderr) {
        console.log(stdout);
        console.error(stderr);
        cb(err);
    });
});

gulp.task('_build', ['build:jspm']);

答案 1 :(得分:2)

  

我知道jspm没有全局安装,因为它是托管控制器,我无法真正全局安装。

看来这不是真的(至少目前。)您可以在托管控制器上全局安装jspm。

我能够使用如下所示的构建过程来解决这个问题:

Build Steps

  1. npm install
  2. npm install -g jspm
  3. 节点C:\ NPM \ Modules \ node_modules \ jspm \ jspm.js install
  4. 1)从package.json安装所有本地依赖项。 2)安装JSPM的全球版本3)从全局安装位置

    中唤起它

    我从M Falanga的回答中意识到节点显然位于控制器的路径中,所以我可以从Powershell /命令行调用它。我通过查看构建的调试日志找到的全局JSPM安装位置。请注意,对于实现者,您需要确保将步骤1和3的工作目录设置为package.json所在的位置。

    替代解决方案

    我还没有在构建中测试下一个选项,但您应该可以跳过额外的构建步骤,只需使用NPM的脚本功能来进行JSPM安装。在这种情况下,您不需要NPM安装步骤,也不需要上面的运行节点步骤。

    在package.json中,您需要以下脚本条目:

      "keywords": [...],
      "scripts": {
        "postinstall": "./node_modules/.bin/jspm install -y"
      },
      "jspm": {...
    

答案 2 :(得分:1)

如果计算机上需要管理权限才能安装软件包,那么您无法在托管构建中执行此操作。在这种情况下,您将不得不创建自己的构建机器。这是我们希望将来解决的问题。

那就是说,这里有一个人为Aurelia设置了什么:http://fabhojs.blogspot.com/2015/03/aurelia-app-skeleton-yeoman-generator.html(来自question)。这些步骤不同,可能有所帮助。