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__