- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法在 AWS CodeBuild(Ubuntu 镜像)中转换我的 typescript 文件,出现 TS2307 错误无法解析我自己的文件。
当然,我在本地尝试了完全相同的项目。调用 tsc
正在读取我的项目目录根目录中的 tsconfig.json 文件。然后我将运行 node ./dist/index.js
以使用 node (而不是 ts-node ./src/index.ts
)执行应用程序。有效(REST 服务提供 json 数据)。
在 AWS CodeBuild 中,tsc
失败。
这些是我的代码行,无法相对解决。在有绝对导入(例如 import * as express from 'express'
)之前,它们都可以正常工作。
有人知道为什么在 AWS CodeBuild 中没有解析/转换,尽管它是相同的项目文件(都是在从 github 拉取之后)?我错过了什么标志?
我在本地使用 Windows。以及 CodeBuild 中的 Ubuntu。
import { TermEndpoints } from './endpoints/termEndpoints'
import { TranslationEndpoints } from './endpoints/translationEndpoints'
import { LanguageEndpoints } from './endpoints/LanguageEndpoints'
import { NavLangEndpoints} from './endpoints/navLangEndpoints'
import { InfoEndpoint } from './endpoints/infoEndpoint'
{
"compilerOptions": {
"baseUrl": "./src/",
"outDir": "./dist",
"allowJs": true,
"target": "es2017",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": false,
"strict": false,
"declaration": true,
"experimentalDecorators": true,
"importHelpers": true,
"esModuleInterop": false,
"resolveJsonModule": true,
"removeComments": true,
"types": ["node"],
"typeRoots": [
"node_modules/@types"
],
"lib": [ "es2017", "dom" ]
},
"include": [
"./src/**/*"
]
}
[Container] 2020/05/11 10:06:10 Running command npm install typescript
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ typescript@3.8.3
updated 1 package and audited 655 packages in 2.484s
found 0 vulnerabilities
[Container] 2020/05/11 10:06:13 Running command tsc --version
Version 3.8.3
[Container] 2020/05/11 10:06:13 Running command npm run build:acc
> sem-translator-api@0.0.1 build:acc /codebuild/output/src400516343/src/github.com/svabra/semtranslatorapi
> tsc
src/ExpressServer.ts(11,31): error TS2307: Cannot find module './endpoints/termEndpoints'.
src/ExpressServer.ts(12,38): error TS2307: Cannot find module './endpoints/translationEndpoints'.
src/ExpressServer.ts(13,35): error TS2307: Cannot find module './endpoints/LanguageEndpoints'.
src/models/relation.ts(3,22): error TS2307: Cannot find module './Term'.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! sem-translator-api@0.0.1 build:acc: `tsc`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the sem-translator-api@0.0.1 build:acc script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-05-11T10_06_18_948Z-debug.log
[Container] 2020/05/11 10:06:18 Command did not exit successfully npm run build:acc exit status 2
[Container] 2020/05/11 10:06:19 Phase complete: BUILD State: FAILED
[Container] 2020/05/11 10:06:19 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: npm run build:acc. Reason: exit status 2
最佳答案
失败原因:菜鸟失误
我只回应其他 Windows 用户学习(这是对我自己的一种羞辱,有利于新手)。
出现错误是由于 Windows 不区分大小写。我从不使用大写文件名,但出于某些原因,我曾经为 TermEndpoints.ts
(和另一个)使用过。使用小写的 termEndpoints.ts
导入文件时,这当然在 Windows 10 中有效。无论如何,我早些时候看到并修复了它 - 但未能将 -u
上游( git push -u origin master
)。因此我认为它是固定的。不是。对不起,伙计们卡在那里。
不区分大小写的风险
在 DevOps 方面,这可能是一个耗时的惩罚——或者——如果你错过了在 Linux 上进行的端到端测试,这是一个危险的场景。验收测试或生产发布失败。
消除风险:进行区分大小写的检查
如果没有经验教训,一个人就不是工程师。这是 webpack 的 npm package 的保护措施,它强制区分大小写的路径。正是我们需要防止这种风险。这可以应用于 javascript 和 typescript (在发布之前,无论如何都应该将 typescript 转换为 javascript --> tsc -p .
)
另一种选择是(正如我所做的那样)编写自己的脚本来在部署时测试引用。例如我正在使用 AWS Elastic Beanstalk .ebextensions。我在 .ebextensions 文件夹内的 .config 文件中调用该命令。当然,还有许多其他解决方案如何调用您的验证脚本。
降低风险:克隆您的生产环境
如果您觉得这永远不会发生在您身上,因为您是在 Linux 或 Max(也不是您的继任者)上开发,请确保最迟您的验收测试环境是生产的克隆。因为它不仅仅是 Windows 不区分大小写可以让你。它也是文件系统的大小写保存、Unicode 格式保存等。
如今,使用 Docker、AWS Beanstalk、AWS CloudFormation 或 TerraForm(Azure 和 Google 有类似的服务)克隆环境很容易。前者可以通过单击进行克隆,后两者允许您编写基础架构脚本并启动一个新实例用于集成、验收测试、生产,等等。确保 DevOps 成功。
关于typescript - 如何在 CodeBuild/Ubuntu (TS2307) 中使用 tsc 解析相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61727663/
起初:我知道命令行中tsc和tsc -w的区别。这不是问题,而是一种特殊情况: 在 VS Code 的 tsconfig 中,我通过设置 "watch":true 启用了观察器。这是绝对想要的。但是现
我正在尝试为 file.ts 运行命令 tsc 以将此代码编译为 js 但我发现以下错误: tsc : File C:\Program Files\nodejs\tsc.ps1 cannot be l
我正在尝试将我的 TypeScript 项目转换为 JavaScript,但是,似乎有些不对劲。我将项目配置为通过 "module":"ES6" 解析为 ES6 模块(又名 ESM)设置,但不能解决问
我有 typescript ,并使用别名。 这是tsconfig.json的一部分 "compilerOptions": { "baseUrl": "./src", ... }, 通过设置基
我在一个项目上使用 typescript ,所有文件都可以用 tsc 正常编译,我正在使用 watch 标志来查找更改。我遇到的问题是,当我创建一个新文件时,tsc 没有获取新文件,我必须退出 tsc
当我使用 tsc --declaration 或 tsconfig.json 声明为 true 生成我的定义文件“.d.ts”时,生成的文件不包括 声明模块“我的模块”{... 这对“vscode”来
我有一个名为 test.ts 的简单 hello world 文件,其中包含以下内容: export class Hello { constructor() { console.log("
我刚刚将 TypeScript 安装为 Node.js 包,令我惊讶的是它似乎可以立即运行。但是我找不到拦截它可能生成的任何消息的方法。使用存在故意错误的 greeter.ts 文件执行以下操作 ts
我有这个: $ tsc -m amd --outFile dist/out.js lib/index.ts lib/index.ts(87,48): error TS1005: ';' expecte
我很惊讶这不在我能找到的文档中 - 但是有什么方法可以告诉 tsc 对目录及其子目录中的所有文件运行而无需经过整个 tsconfig.json 设置? 最佳答案 据我所知没有。在没有 tsconfig
我想知道是否有人知道有关发生上下文切换时 Linux 中的时间戳计数器的更多详细信息?直到现在我的观点是,TSC 值在每个时钟周期内只增加 1,无论是在内核模式还是在用户模式下都是独立的。我现在使用
使用: inline uint64_t rdtsc() { uint32_t cycles_high; uint32_t cycles_low; asm volatile ("CPUID\
我以独立于生态系统的方式编写 typescript 代码。我决定在导入中包含文件扩展名,以匹配网络和 Deno。 import xyz from "./foo.ts"; 如何让 typescript
首先,我已经准备好了this sample GitHub repository作为重现我的问题的最低要求。 我遇到了 tsc 无法将我的 TypeScript 编译为 JavaScript 的问题。
tsc 是否有任何标志使其更详细地说明它正在做什么?我找到了 --terse 和 --verbose 引用,但不确定这些是旧标志还是提议的标志,因为它们都不起作用。 例如,我想看看它正在处理哪些文件。
我是 tsconfig.json 配置的新手,但我只是想像它应该的那样将我的 src 目录编译为编译的 javascript,但它只是没有创建 outDir 包含编译代码的文件夹。 这是我的tscon
我正在尝试使用 tsc 为一些现有的 javascript 代码自动生成 typescript 声明文件。 typescript 编译器给了我一些我不明白的错误(在这种情况下为 TS9005)。是否有
我希望将单个 .ts 文件编译为标准输出,如下所示: tsc foo.ts > foo.js 这有可能吗?我想在不使用 tsconfig.json 文件的情况下控制输出的位置。 最佳答案 见 http
TypeScript 的维基百科页面提到编译器本身是用 TypeScript 编写的。 这怎么可能? TypeScript 转译为 JavaScript,而 JavaScript 通常由 Web 浏览
我正在使用 TSC ME240 打印机打印标签。 标签设计有公司标志、文字部分和条形码。 条形码和文本打印得很好,但 Logo 没有打印, Logo 是存储在打印机内存中的 .bmp 图像。 每次打印
我是一名优秀的程序员,十分优秀!