2

我正在尝试按照https://angular.io/docs/ts/latest/guide/upgrade.html将现有的 anguar.js 应用程序升级到 angular 2 。

该应用程序已经使用 Typescript 编写,我们正在使用 browserify 和 tsify 来编译和捆绑该应用程序。

使用 npm 安装 angular 2 依赖项并尝试引导混合应用程序后,browserify 给我以下错误:

/my-project/node_modules/@angular/upgrade/static.js:8
export { downgradeComponent } from './src/aot/downgrade_component';
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'

该错误仅在添加以下代码后出现:

import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app.module';
import {UpgradeModule} from '@angular/upgrade/static';

platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
    const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
    upgrade.bootstrap(document.documentElement, ['sagaDesktopApp']);
});

这是我的tsconfig.json

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

任何帮助将不胜感激。

4

1 回答 1

2

我已经重现了这个问题。这与存在一个static.js文件@angular/upgrade以及 Browserify 尝试解析@angular/upgrade/static它时解析为:

node_modules/@angular/upgrade/static.js

但是,其目的是解决:

node_modules/@angular/upgrade/static/package.json

目录中package.json的包含一个由非 ES6 捆绑器(如 Browserify)使用的条目。staticmain

Browserify 模仿Node 的模块解析机制,它应该在目录之前检查文件,所以为了解决这个问题,在导入后附加一个斜杠:

import { UpgradeModule } from '@angular/upgrade/static/';

Browserify 将首先检查目录并将其解析package.json为捆绑包。

如果您有兴趣,在这个 Tsify 问题package.json中有关于文件main/module事物的更多信息。

于 2017-01-28T11:04:33.527 回答