typescript - 为什么我在一个 webpack 项目上得到 "Unexpected token import"而在另一个项目上却没有?

标签 typescript webpack

我有 2 个工作方式不同的项目,我无法说出有什么不同。我在一个项目中有以下...

// In .ts wile
import 'core-js/es6';
import 'reflect-metadata';

这在一个项目上效果很好,但是,另一个项目具有相同的 tsconfig.json 和 typings.json 以及在我得到的 webpack 配置中配置的 ts-loader...

Uncaught SyntaxError: Unexpected token import

失败的转译后的 JS 看起来像这样......

/***/ function(module, exports, __webpack_require__) {

    /* WEBPACK VAR INJECTION */(function(process) {import 'core-js/es6';
    import 'reflect-metadata';

我会在稍后发布成功的项目

所以我的问题是我错过了什么? typescript 定义是否未正确导入?我已经尝试再次运行 typings install 来排除这种可能性。

更多信息

//tsconfig
{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
  }
}

// Typings.json
{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160602141332",
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
    "node": "registry:dt/node#6.0.0+20160621231320"
  }
}

最佳答案

我有一个类似的问题,我在使用 async\await 和 Promises(都是 ES6 结构)时使用 ts 源文件中的 import 关键字来导入其他 ts 模块。

我可以使用默认的 js 目标版本 (ES5) 使用 TypeScript 进行转译,这会产生转译错误,提示 async\await 和 Promise 关键字,但因为我实际上运行的是 Node 6.4.0。一切实际上都在运行时工作。

在上述情况下,'Import' 关键字从 ts 转换为 js 为:

var BasePage_1 = require('./BasePage');

因此,我遇到了 tsc 转译错误,但 Node 在运行时通过上述“导入”翻译工作正常。

如果我使用 -t 开关告诉 tsc 转换为 ES6,那么转换是干净的,没有错误,但是 Node 失败,因为它说它不理解发出的 js 文件中的“导入”关键字。

现在,tsc 为“导入”发出以下翻译:

import { BasePage } from './BasePage';

因此,上面的翻译实际上根本不是翻译,Node 在运行时使用“Import”关键字阻塞 js 文件。

总结:

我使用此命令行告诉 tsc 使用 ES6 库但发出正确的模块导入语法解决了这个难题:

myTypeScriptSourceFile.ts -t ES6 -m commonjs

现在我得到了一个干净的转译文件,并且没有来自 Node.js 的运行时错误。因为现在 'Import' 正在使用 'require' 保留字正确翻译。

更多细节在这里: https://www.typescriptlang.org/docs/handbook/compiler-options.html https://www.typescriptlang.org/docs/handbook/module-resolution.html

关于typescript - 为什么我在一个 webpack 项目上得到 "Unexpected token import"而在另一个项目上却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711136/

相关文章:

javascript - 如何解决 Ionic Uncaught Error : Cannot find module "." when adding new page?

javascript - vueJS + webpack : importing fonts, CSS 和 node_modules

javascript - 带有 Webpack 的内联 CSS,没有 HtmlWebpackInlineSourcePlugin?

javascript - 如何在鼠标悬停时向菜单项添加和删除类

angular - ionic native http get 返回类型错误 - 无法读取未定义的属性 'match'

typescript - 为什么 TypeScript 不识别 Vue 插件的模块扩充?

javascript - webpack入门,导入报错

javascript - 未定义但可以在控制台中使用的函数(Webpack)

javascript - 为什么 typescript 允许在声明变量之前使用它?

javascript - Angular HttpInterceptor : How to use RxJS for multiple conditions