我正在尝试将现有的 anguar.js 应用程序升级到 angular 2,遵循 https://angular.io/docs/ts/latest/guide/upgrade.html。
该应用程序已经是用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
}
}
任何帮助将不胜感激。
我已经重现了这个问题。这与以下事实有关:@angular/upgrade
中有一个static.js
文件,当 Browserify 尝试解析@angular/upgrade/static
时,它会解析为:
node_modules/@angular/upgrade/static.js
但是,目的是让它解决:
node_modules/@angular/upgrade/static/package.json
static
目录中的package.json
包含一个main
条目,供非 ES6 捆绑器(如 Browserify)使用。
Browserify模仿Node的模块解析机制,它应该在目录之前检查文件,因此要解决此问题,请在导入中附加一个尾部斜杠:
import { UpgradeModule } from '@angular/upgrade/static/';
然后,Browserify 将首先检查目录,并将package.json
解析为捆绑包。
如果您有兴趣,在此Tsify问题中有更多关于package.json
文件main
/module
的信息。