ES6 导入问题 [SystemJS 0.20.9 + TypeScript + Angular 2 + jspm 0.17.0-beta.40]
Issues with ES6 import [SystemJS 0.20.9 + TypeScript + Angular 2 + jspm 0.17.0-beta.40]
我正在尝试使用所有新工具 (jspm 0.17.0-beta.40) 设置 Angular 2 应用程序。
我正在转译到 System
模块。这是 tsconfig.json
:
{
"compileOnSave": false,
"compilerOptions": {
"target": "ES5",
"module": "System",
"moduleResolution": "Node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noImplicitAny": true,
"rootDir": "../"
}
}
问题出在 ES6 import
上。像这样的东西被转译后:
import { Component, ViewEncapsulation, AfterViewInit } from '@angular/core';
这个的用途是:
core_1.Component
但不幸的是,浏览器运行应用程序无法识别它。
"TypeError: core_1.Component is not a function
at Object.execute (...app/app.component.js:32:24)
at E (...jspm_packages/system.js:4:7541)
at S (...jspm_packages/system.js:4:6746)
at S (...jspm_packages/system.js:4:6646)
at S (...jspm_packages/system.js:4:6646)
at x (...jspm_packages/system.js:4:6102)
at ...jspm_packages/system.js:5:6612"
当我使用 ViewEncapsulation
.
时出现相同类型的错误
这是在转译到 System
模块时。
使用 CommonJS
模块转译成功(应用程序通过了这一步)。
不过我不能用那个,因为我用
import html from './app.component.html';
使用以下 meta
配置:
meta: {
"*.html": {
"loader": "text"
},
}
失败并显示错误
Error: No template specified for component AppComponent
我试过切换 JSPM 和 System 的版本。
显然,0.20 版系统中引入的更改导致了此问题。
关于如何处理这个问题有什么想法吗?
是的,这是 SystemJS 0.20 中的一个更改,其中不再支持非 ES 模块的命名导出,以便与 ES 模块和 CommonJS 之间的 NodeJS 中的互操作方式保持一致,这仅提供与默认导入形式 - import module from 'module'
(相当于 import {default as module} from 'module'
)。
由于 Angular 是从本身不是 ES 模块的 UMD 构建加载的,因此不支持命名的导出。
以下配置可用于告诉 SystemJS 将 Angular 核心模块视为具有命名导出的 ES 模块:
meta: {
'@angular/core': { esModule: true }
}
我正在尝试使用所有新工具 (jspm 0.17.0-beta.40) 设置 Angular 2 应用程序。
我正在转译到 System
模块。这是 tsconfig.json
:
{
"compileOnSave": false,
"compilerOptions": {
"target": "ES5",
"module": "System",
"moduleResolution": "Node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noImplicitAny": true,
"rootDir": "../"
}
}
问题出在 ES6 import
上。像这样的东西被转译后:
import { Component, ViewEncapsulation, AfterViewInit } from '@angular/core';
这个的用途是:
core_1.Component
但不幸的是,浏览器运行应用程序无法识别它。
"TypeError: core_1.Component is not a function
at Object.execute (...app/app.component.js:32:24)
at E (...jspm_packages/system.js:4:7541)
at S (...jspm_packages/system.js:4:6746)
at S (...jspm_packages/system.js:4:6646)
at S (...jspm_packages/system.js:4:6646)
at x (...jspm_packages/system.js:4:6102)
at ...jspm_packages/system.js:5:6612"
当我使用 ViewEncapsulation
.
这是在转译到 System
模块时。
使用 CommonJS
模块转译成功(应用程序通过了这一步)。
不过我不能用那个,因为我用
import html from './app.component.html';
使用以下 meta
配置:
meta: {
"*.html": {
"loader": "text"
},
}
失败并显示错误
Error: No template specified for component AppComponent
我试过切换 JSPM 和 System 的版本。
显然,0.20 版系统中引入的更改导致了此问题。
关于如何处理这个问题有什么想法吗?
是的,这是 SystemJS 0.20 中的一个更改,其中不再支持非 ES 模块的命名导出,以便与 ES 模块和 CommonJS 之间的 NodeJS 中的互操作方式保持一致,这仅提供与默认导入形式 - import module from 'module'
(相当于 import {default as module} from 'module'
)。
由于 Angular 是从本身不是 ES 模块的 UMD 构建加载的,因此不支持命名的导出。
以下配置可用于告诉 SystemJS 将 Angular 核心模块视为具有命名导出的 ES 模块:
meta: {
'@angular/core': { esModule: true }
}