Azure devops 基于VSO的Aurelia构建宿主构建控制器

Azure devops 基于VSO的Aurelia构建宿主构建控制器,azure-devops,aurelia,jspm,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 我确实有后构建目标来将jspm_包和dist文件夹复制到我的发布网站文件夹 npm安装运行良好,但是当涉及到jspm cc时(如果我删除jspm cc并让它运行jspm安装

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

npm install
.node_modules/.bin/jspm cc
.node_modules/.bin/jspm install -y
.node_modules/.bin/gulp build
我确实有后构建目标来将jspm_包和dist文件夹复制到我的发布网站文件夹

npm安装运行良好,但是当涉及到jspm cc时(如果我删除jspm cc并让它运行jspm安装-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.
jspmcc
正在将全局jspm文件夹从C:\Users\buildguest\.jspm迁移到C:\Users\buildguest\AppData\Local\.jspm。。。
正在复制配置。。。
迁移到新的jspm文件夹时出错
2> EXEC:error:enoint,没有这样的文件或目录“C:\Users\buildguest\.jspm\config”[d:\a\src\WebGUI\owinareliascaffold\owinareliascaffold.csproj]
在Object.fs.openSync(evalmachine:427:18)
在Object.fs.readFileSync(evalmachine:284:15)
反对。(d:\a\src\WebGUI\ows\scaffold\public\node\u modules\jspm\lib\global config.js:36:24)
在模块处编译(Module.js:456:26)
在Object.Module.\u extensions..js(Module.js:474:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
at Module.require(Module.js:364:17)
根据需要(模块js:380:17)
反对。(d:\a\src\WebGUI\owscaffold\public\node\u modules\jspm\lib\registry.js:19:20)
确定加载程序文件缓存已清除。
确定包缓存已清除。

我知道jspm不是全局安装的,因为它是一个托管控制器,所以我不能真正全局安装它。我的问题是,如何在没有全局jspm安装的情况下完成这项工作?是否有一种无需迁移配置文件的变通方法?

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


这就是说,下面是一个人做了什么让奥雷莉亚成立:(从这个)。这些步骤是不同的,可能会有所帮助。

即使无法在托管的生成代理上安装和运行jspm CLI,也可以通过节点本身运行jspm

首先,确保安装了jspm—powershell脚本就是这样做的。或者,您可以使用VSO Build的“npm安装任务”,前提是jspm位于
package.json
文件中。

我使用Gulp通过节点执行jspm。我不确定这是否是完成这一步的最佳方法,但它是有效的。。。我用了VSO的“吞咽任务”

以下是
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']);
我知道jspm不是全局安装的,因为它是一个托管控制器,所以我不能真正全局安装它

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

我可以通过如下的构建过程来解决这个问题:

  • npm安装
  • npm安装-gjspm
  • 节点C:\NPM\Modules\node\u Modules\jspm\jspm.js安装
  • 1) 安装my 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": {...
    

    谢谢你的回复。我以前只靠咕噜就能让它工作。问题在于jspm的安装。您发送的链接不涉及自动生成。我正在尝试设置一个内部构建机器,但也遇到了一些问题。你有没有用VSO控制器找到解决方案?答案很简单。您不能在托管的生成控制器上执行此操作。我已经切换到Typescript,我使用requirejs。我正在使用这里的aurelia TS文件。我从没想过要那样做。这是你目前正在做的事吗?是的。我和你有同样的问题,包括没有找到任何好的答案。通过查看
    ..\AppData\Roaming\npm\jspm.cmd
    文件的内容,我了解了CLI在本地计算机上的作用,然后找到了解决方案。它只是使用node运行jspm.js文件。我知道该节点安装在VSO构建主机上,所以我尝试了一下。我将尝试一下。如果它起作用,兄弟,你会为我的团队节省很多时间!你是如何从GitHub绕过利率限制问题的?对我来说也很有用!!哇!