我的项目中有一个假想的Typescript文件(简化示例)。
Utils.ts:
import * as HelperFromNodeModules from 'helper-from-node-modules';
class Utils {
static foo() {
return HelperFromNodeModules.parse(...);
}
}
导入
helper-from-node-modules
包含一个Javascript文件。helper-from-node-modules.js:
const dep = require('foo');
function parse(...) {
return bar.map((e) => {...});
}
并且从
@types/helper-from-node-modules
index.d.ts中:export function parse(...);
tsconfig.json
包含以下内容:{
...
"target": "es5",
"lib": ["es2015.collection","es6", "dom"],
"sourceMap": true,
"allowJs": true,
...
}
所以我的问题是Typescript编译器的输出文件是我的已编译源代码加上所有格式的巨大串联。由于
helper-from-node-modules
始终是.js文件,因此编译器似乎只是将其内容附加到输出文件中。因此,尽管"target": "es5"
仍在输出文件中,但仍包含es6 Artifact (如const
和(e) => {...}
),从而导致以后出现错误,这些错误要求严格使用es5 javascript。有没有办法告诉Typescript编译器/编译器在javascript依赖项上也输出es5?
如果需要,可使用的上下文:
我犯了一个可怕的错误,将
react-create-app-typescript
和react-scripts-ts
用作我的React应用程序的样板。内置的webpack堆栈对源代码应该来自哪里以及是否已编译的源必须必须为es5持谨慎态度。如果尝试最小化任何es6 Artifact ,打包的minifier / uglifier将崩溃。我知道我可以运行npm run-script eject
并修改各种配置脚本,但是我正努力避免这种困惑。我希望仅将其源代码编译为es6,而不会将其webpack堆栈弄乱。 最佳答案
不幸的是,没有办法将依赖关系从ES6转换为ES5。 tsconfig.json
中的该选项仅影响如何转换TypeScript代码。您应该做的是使用helper-from-node-modules
的ES5版本。例如,Angular随ES5(umd),ES5,ES6一起分发了多个软件包。然后,在库的package.json
中,有一些选项可以告诉打包程序(通常是webpack)使用哪个版本,具体取决于目标用于TypeScript。
如果您使用的库不支持该库,那么您唯一的选择就是自己将其转换为ES5,或者使用babel或使用其他方法。
但是,对于一个仅作为ES6分发的库来说,这是很奇怪的。
关于javascript - typescript 转译es6 .js对es5的依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50090972/