【问题标题】:Aurelia build on VSO Hosted Build ControllerAurelia 在 VSO 托管构建控制器上构建
【发布时间】:2015-07-18 01:07:35
【问题描述】:

我正在尝试在 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 安装的情况下解决这个问题?是否有不需要迁移配置文件的解决方法?

【问题讨论】:

  • 你找到VSO控制器的解决方案了吗?
  • 简单的答案。您不能在托管的构建控制器上。我已切换到 Typescript 并使用 requirejs。我正在使用来自这里的 aurelia TS 文件 github.com/cmichaelgraham/aurelia-typescript

标签: azure-devops aurelia jspm


【解决方案1】:

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

首先,确保 jspm 已安装 - 您的 powershell 脚本已安装。或者,您可以使用 VSO Build 的“npm 安装任务”,前提是 jspm 在您的 package.json 文件中。

我使用 Gulp 通过 node 执行 jspm。我不确定这是否是执行此步骤的最佳方法,但它有效......我使用了 VSO 的“Gulp 任务”

这里是来自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']);

【讨论】:

  • 有趣。从来没有想过这样做。这是你目前正在做的事情吗?
  • 是的。我和你有同样的问题,包括没有找到任何好的答案。在我通过查看我的 ...\AppData\Roaming\npm\jspm.cmd 文件的内容来查看 CLI 在我的本地计算机上执行的操作后,我找到了解决方案。它只是使用节点运行 jspm.js 文件。我知道该节点安装在 VSO 构建主机上,所以我试了一下。
  • 我要试试这个。如果可行,兄弟,您将为我的团队节省很多时间!
  • 您是如何解决 GitHub 的速率限制问题的?
【解决方案2】:

我知道 jspm 没有全局安装,因为它是一个托管控制器,所以我不能真正全局安装它。

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

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

  1. npm 安装
  2. npm install -g jspm
  3. 节点 C:\NPM\Modules\node_modules\jspm\jspm.js 安装

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": {...

【讨论】:

  • 也适合我!!哇!
【解决方案3】:

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

也就是说,有人为设置 Aurelia 所做的工作:http://fabhojs.blogspot.com/2015/03/aurelia-app-skeleton-yeoman-generator.html(来自question)。这些步骤不同,可能会有所帮助。

【讨论】:

  • 感谢您的回复。我以前只用咕噜声就可以让它工作。它的jspm安装就是问题所在。您发送的链接不涉及自动构建。我正在尝试设置一个本地构建机器,但也遇到了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多