【发布时间】:2021-06-20 06:53:30
【问题描述】:
我希望能够在没有 webpack、gulp 等的情况下做到这一点,只需“tsc [args] mycode.ts”。这可能吗?
在我的 package.json 中,我有一个这样的构建命令:
"build:mycode": "tsc --allowSyntheticDefaultImports --lib es2018 --lib dom -m amd -t es2018 --moduleResolution node --outFile ./mycode.js ./mycode.ts",
(以上所有配置都是使用tsc 命令行参数完成的,而不是在tsconfig.json 中设置的原因是我正在生成一个与我的主项目不同的构建脚本,确实使用tsconfig.json、webpack 等)
我尝试使用-m commonjs,但--outFile 不允许使用,只能使用amd 或system。
问题是这样生成的代码在被node调用时会产生这个错误:
ReferenceError: define is not defined
我不知道如何定义define。 node 命令是否有提供必要定义的参数?到目前为止,我在 Google 上搜索到的所有内容都调用了我宁愿避免使用的额外工具,或者是针对 web browser 而不是创建命令行工具。
注意:任何涉及<scr ipt> 标签的解决方案都不适用。
【问题讨论】:
-
deno bundle这样做,您可以提供自己的 TSConfig 作为参数 -
@jsejcksn,不幸的是,它看起来像输出单文件模块,而不是可执行文件,而且看起来也是面向网络的。
-
在这种情况下,您的问题不清楚。如果不是捆绑包,“单个文件”是什么意思?另外,我不确定您所说的“面向网络”是什么意思。 Deno 简单地捆绑了 ECMAScript 模块(可选地以 IIFE 格式作为选项)。任何与环境相关的配置(
window等全局变量)都取决于您的 TSConfig。 -
通过“面向网络”,我看到该文档中使用的代码带有
<script>标签,并且还以这样一种方式捆绑,即通过包含捆绑包不会自动执行任何内容,它只会提供定义可以调用。我希望“node mycode.js”立即执行代码,而不仅仅是返回一个我可以调用来执行该代码的函数。 -
我现在了解您的担忧。我认为现在是研究 ES 模块的好时机。
标签: javascript node.js typescript