构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块

Posted

技术标签:

【中文标题】构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块【英文标题】:Building a hybrid angular/angularjs app - how to load angular modules in angularjs app 【发布时间】:2019-12-27 09:26:40 【问题描述】:

我想开始在使用 gulp 构建的现有 angularjs 项目中使用 Angular 组件,并想使用 downgradeModule 创建一个混合 Angular/AngularJS 应用程序。

我在从 Angular 项目导入 AppModule 时遇到问题,在使用 gulp 捆绑 AngularJS 应用程序时该项目不可见 - browserify 步骤抱怨找不到 AppModule:

Error: module "../new-app/src/app/app.module" not found from "Users/me/src/old-app/public/src/fake_72fafc74.js"

模块在AngularJS入口文件中是这样导入的:

import  platformBrowserDynamic  from '@angular/platform-browser-dynamic';
import  downgradeModule  from '@angular/upgrade/static';
import  AppModule  from '../new-app/src/app/app.module';

const bootstrapFn = (extraProviders: StaticProvider[]) => 
  const platformRef = platformBrowserDynamic(extraProviders);
  return platformRef.bootstrapModule(AppModule);
;

const downgradedModule = downgradeModule(bootstrapFn);

angular.module('old-angular-js-app', [..., downgradedModule])

我想知道如何使用ng build 命令单独构建 Angular 应用程序,然后在捆绑 angularjs 应用程序时使编译后的 AppModule 可见。

我想我可以在 gulp 任务中调用 ng build 命令并将工件复制到 AngularJS dist 文件夹:

var exec = require('child_process').exec;

gulp.task('build', function (cb) 
  exec('ng build', function (err, stdout, stderr) 
    // copy the artifacts to the dist folder
    cb(err);
  );
)

但我不确定如何在导入模块时解析 AppModule 的路径:

import  AppModule  from '../new-app/src/app/app.module';

【问题讨论】:

【参考方案1】:

我知道这不是您的要求,但我真的建议您不要使用 gulp 来捆绑应用程序。由于您正在转向 Angular,因此您应该使用 Angular CLI 来构建应用程序。随着您继续迁移,这将减少很多问题。

我们有一个与 gulp 捆绑在一起的 angularJS 应用程序,迁移到 angular CLI 确实值得付出努力。

我们关注this guide,现在正在愉快地进行迁移

摆脱 gulp 的主要工作是创建“打字稿导入链”。这在指南中有所介绍,但简而言之,您需要做的是在 angularJS 应用程序的每个文件夹中创建 index.ts 文件并以正确的顺序导入它们。

我们的 angularJS 文件夹中的第一个 index.ts 文件看起来像这样;

import './../../node_modules/adal-angular/dist/adal-angular.min';
import './../../node_modules/angular-cookies/angular-cookies.min';

import './app.module';
import './subfolder1';  // In reality this is an app area, just to show the idea!
import './subfolder2';

子文件夹下面的 index.ts 可能看起来像这样;

import './some.module';
import './some.service';
import './some.directive';

一旦你有了这个,你就可以使用ng build构建完整的应用程序。

【讨论】:

以上是关于构建混合 angular/angularjs 应用程序 - 如何在 angularjs 应用程序中加载 Angular 模块的主要内容,如果未能解决你的问题,请参考以下文章

为 iOS 和 Android 构建具有原生性能的混合 React 应用程序

如何在 mobilefirst 混合应用程序中使用 IPV6 IP 地址构建应用程序?

构建 iOS 混合应用程序不会更新 worklight.plist 或 root.plist 文件

柯南构建混合发布和调试

如何在 Phonegap 和 Cordova 构建的混合应用程序上测试调试(Cpu 和 FPS)使用情况

在 Xcode 中运行时,IBM MobileFirst 7.1 混合应用程序构建失败