2

我有以下层次结构:

dist/
 |- BuildTasks/
  |- CustomTask/
   - CustomTask.js
node_modules/
source/
 |- BuildTasks/
  |- CustomTask/
   - CustomTask.ts
   - tsconfig.json

此外,我正在尝试为内部(私人)使用创建一个 VSTS 任务扩展。最初,我的 tsconfig.json 在我的根目录中,并且在我的本地机器上一切正常。问题是 VSTS 扩展要求所有文件都包含在与任务文件夹本身相同的目录中。有关详细信息,请参阅https://github.com/Microsoft/vsts-task-lib/issues/274

您需要发布一个自包含的任务文件夹。代理不会运行 npm install 来恢复您的依赖项。


最初,我通过包含一个将整个 node_modules 目录复制到每个任务文件夹中的步骤解决了这个问题,在这种情况下,我的CustomTask文件夹包含我的 JS 文件。但是,考虑到并非我正在编写的每个任务都具有相同的模块要求,这似乎有点过分。

我的想法是在每个任务文件夹中创建一个 tsconfig.json 来指定创建一个包含所有依赖模块的单个输出文件,但不幸的是它不起作用:

{
  "compilerOptions": {
    "baseUrl": ".",
    "target": "ES6",
    "module": "system",
    "strict": true,
    "rootDir": ".",
    "outFile": "../../../dist/BuildTasks/CustomTask/CustomTask.js",
    "paths": {
      "*" : ["../../../node_modules/*"]
    }
  }
}

在添加“路径”之前,我收到以下错误:

错误 TS2307:找不到模块“vsts-task-lib/task”。
错误 TS2307:找不到模块“时刻”。

添加路径后,我仍然得到它找不到模块“moment”的错误,它位于我的 node_modules 目录中。另外,当我查看输出 JS 时,它似乎没有包含必要的“vsts-tasks-lib”代码,可能是因为它在“moment”模块方面仍然存在错误?不确定我错过了什么?

4

1 回答 1

1

使用webpack编译 JavaScript 模块,简单示例:

webpack.config.js:

const path = require('path');

module.exports = {
    entry: './testtask.ts',
    module: {
        rules: [
          {
              test: /\.tsx?$/,
              use: 'ts-loader',
              exclude: /node_modules/
          }
        ]
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.js']
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    node: {
        fs: 'empty'
    },
    target: 'node'
};

之后,任务文件夹中只有 bundle.js 和 task.json。

更新: testtask.ts中的示例代码:

import tl = require('vsts-task-lib/task');
import fs = require('fs');
console.log('Set variable================');
tl.setVariable('varCode1', 'code1');
tl.setTaskVariable('varTaskCode1', 'taskCode1');
var taskVariables = tl.getVariables();
console.log("variables are:");
for (var taskVariable of taskVariables) {
    console.log(taskVariable.name);
    console.log(taskVariable.value);
}
console.log('##vso[task.setvariable variable=LogCode1;]LogCode1');
console.log('end========================');
console.log('current path is:' + __dirname);
fs.appendFile('TextFile1.txt', 'data to append', function (err) {
    if (err) throw err;
    console.log('Saved!');
});

console.log('configure file path:' + process.env.myconfig);
console.log('configure file path2:' + process.env.myconfig2);
于 2018-06-11T07:56:53.047 回答