我的 tsconfig.json 在我的 node_modules 目录中找不到模块,不确定哪里出了问题
My tsconfig.json cannot find a module in my node_modules directory, not sure what is wrong
我有以下层次结构:
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:
you need to publish a self contained task folder. the agent doesnt run
npm install to restore your dependencies.
最初,我解决了这个问题,方法是将整个 node_modules 目录复制到每个任务文件夹中,在本例中是我的 CustomTask 文件夹,其中包含我的 JS 文件。但是,考虑到并非我编写的每个任务都具有相同的模块要求,这似乎有点过头了。
我的想法是在每个任务文件夹中创建一个 tsconfig.json 来指定创建一个包含所有依赖模块的单个输出文件,但不幸的是它不起作用:
{
"compilerOptions": {
"baseUrl": ".",
"target": "ES6",
"module": "system",
"strict": true,
"rootDir": ".",
"outFile": "../../../dist/BuildTasks/CustomTask/CustomTask.js",
"paths": {
"*" : ["../../../node_modules/*"]
}
}
}
在添加 "paths" 之前,我遇到了以下错误:
error TS2307: Cannot find module 'vsts-task-lib/task'.
error TS2307: Cannot find module 'moment'.
添加路径后,我仍然收到无法找到模块 'moment' 的错误,该模块位于我的 node_modules 目录中。另外,当我查看输出 JS 时,它似乎没有包含必要的 'vsts-tasks-lib' 代码,可能是因为它仍然有关于 'moment' 模块的错误?不确定我错过了什么?
使用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);
我有以下层次结构:
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:
you need to publish a self contained task folder. the agent doesnt run npm install to restore your dependencies.
最初,我解决了这个问题,方法是将整个 node_modules 目录复制到每个任务文件夹中,在本例中是我的 CustomTask 文件夹,其中包含我的 JS 文件。但是,考虑到并非我编写的每个任务都具有相同的模块要求,这似乎有点过头了。
我的想法是在每个任务文件夹中创建一个 tsconfig.json 来指定创建一个包含所有依赖模块的单个输出文件,但不幸的是它不起作用:
{
"compilerOptions": {
"baseUrl": ".",
"target": "ES6",
"module": "system",
"strict": true,
"rootDir": ".",
"outFile": "../../../dist/BuildTasks/CustomTask/CustomTask.js",
"paths": {
"*" : ["../../../node_modules/*"]
}
}
}
在添加 "paths" 之前,我遇到了以下错误:
error TS2307: Cannot find module 'vsts-task-lib/task'.
error TS2307: Cannot find module 'moment'.
添加路径后,我仍然收到无法找到模块 'moment' 的错误,该模块位于我的 node_modules 目录中。另外,当我查看输出 JS 时,它似乎没有包含必要的 'vsts-tasks-lib' 代码,可能是因为它仍然有关于 'moment' 模块的错误?不确定我错过了什么?
使用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);