TypeScript 转译的文件是不可执行的

Posted

技术标签:

【中文标题】TypeScript 转译的文件是不可执行的【英文标题】:TypeScripts transpiles files which are non-executable 【发布时间】:2017-11-20 13:56:50 【问题描述】:

TypeScript 似乎在转译不可执行的目标文件。

我必须在转译后运行chmod u+x <file> 才能使文件成为可执行文件。

情况就是这样,即使他们有一个 hashbang:

#!/usr/bin/env node

如何告诉 TypeScript / tsc 创建可执行文件?

【问题讨论】:

我也很想配置 typescript 以使生成的 .js 文件在默认情况下也不可写.... 嗨,@Alexander Mills。您能否提供使用 typescript 编译器更改文件权限的动机? 【参考方案1】:

更改文件的权限不是打字稿的责任。

解决方案 1. 在 package.json 中的构建过程中使用单独的步骤。例如:


  "name": "temp",
  "version": "1.0.0",
  "scripts": 
    "build": "tsc && chmod +x build/index.js"
  ,
  "dependencies": 
    "typescript": "^2.3.4"
  

解决方案 2。

写TypeScript Language Service Plugin。我认为,在你的情况下,这是过度工程。

【讨论】:

嗯? tsc 从字面上写出文件,.ts -> .js + .d.ts。它可以选择用于写入文件的权限。这个构建步骤应该是不必要的。 @AlexanderMills 在构建过程中修改权限,如果他们试图默认安全的话,这有点不负责任。您可能会争辩说,他们可以默认执行他们现在所做的事情,并为此提供一个选项,但随后他们将不得不处理该代码中存在错误的可能性。风险大于收益,尤其是当 typescript 专注于一个非常具体的问题时,团队会随意忽略编译器通常会负责的其他功能请求。 嗯,我真的需要 TS 来创建可执行但不可写的 .js 文件。我不知道为什么 TS 不允许我们配置这个。 @Alexander Mills,您可以为此使用 TS 插件。 @AlexanderMills,这是我在第二个解决方案中的建议。你检查链接了吗github.com/Microsoft/TypeScript/wiki/…

以上是关于TypeScript 转译的文件是不可执行的的主要内容,如果未能解决你的问题,请参考以下文章

为啥 TypeScript 4 转译器没有看到这个不正确的类型传递给函数?

Angular2 的 TypeScript 到 JavaScript 转译器

为啥 Typescript 在转译代码中将 .default() 添加到类构造函数中?

如何避免 Typescript 转译 Jest __mocks__

您如何将伊斯坦布尔代码覆盖率与转译的 Typescript 一起使用?

vs 代码不转译 ts 文件