首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用AOT / rollup的ui-路由器/角混合

不使用AOT / rollup的ui-路由器/角混合
EN

Stack Overflow用户
提问于 2017-08-04 12:03:43
回答 2查看 886关注 0票数 4

我试图使用户界面路由器工作的角度混合应用程序。它在使用JIT编译时工作,但当我试图使它与AOT和rollup一起工作时,rollup步骤在错误映射中失败:

‘@ui路由器/角-杂交’是由src\app.module.js导入的,但无法解决--将其视为外部依赖项。

我已经在github 这里上打开了一个问题。该错误可以通过下载角混合极小示例并在此示例上按照角指南中描述的方式设置AOT和汇总来再现,如这个柱塞中的文件所示。从‘@uirouter/角-杂交’的导入是不可能被汇总解决的。

代码语言:javascript
运行
复制
import { UIRouterUpgradeModule } from '@uirouter/angular-hybrid';

有没有人有一些经验,试图使角-混合工作结合AOT/汇总?有人成功这样做了吗?

更新

我已经设法使汇总步骤工作,通过添加一个自定义插件到rollup配置,解决角混合包。但即使如此,应用程序在运行时失败,而引导角并在其中请求UrlService。使用以下调用找不到UrlService提供程序(有趣的是,UrlService存在于注入器的注册提供程序中,但使用UrlService令牌是不可能找到的):

代码语言:javascript
运行
复制
var router = injector.get(UrlService);

下面是调整后的,我不确定它是否正确,因为DI不工作。然而,前一个问题是,如何使角-混合与汇总兼容仍然存在。

代码语言:javascript
运行
复制
import nodeResolve from "rollup-plugin-node-resolve"
import commonjs from "rollup-plugin-commonjs";
import uglify from "rollup-plugin-uglify";
import progress from "rollup-plugin-progress";

class UIRouterHybridResolver 
{
    constructor(options) 
    {
        this.options = options;
    }

    resolveId(id, from)
    {
        if (id.startsWith("@uirouter/angular-hybrid"))
        {
            return `${__dirname}/node_modules/@uirouter/angular-hybrid/lib/angular-hybrid.js`;          
        }

        return null;
    }
}
const uIRouterHybridResolver = (config) => new UIRouterHybridResolver(config);

export default {
    entry: "src/main.js",
    dest: "src/build.js", // output a single application bundle
    sourceMap: false,
    format: "iife",
    onwarn: function (warning) {
        // Skip certain warnings

        // should intercept ... but doesn't in some rollup versions
        if (warning.code === "THIS_IS_UNDEFINED") { return; }

        // console.warn everything else
        console.warn(warning.message);
    },
    plugins: [       
        commonjs({
            include: [
                "node_modules/rxjs/**",
                "node_modules/@uirouter/core/**"
            ]
        }),
        nodeResolve({ jsnext: true, module: true }),
        uIRouterHybridResolver(),
        uglify(),        
        progress({ clearLine: true })
    ],
    globals: { angular: "angular" },
    external: ["angular"]
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-10 13:54:00

你快到了。我们的rollup.js包的最后一个本质是:

一个UIRouter CORE esm版本(参见https://stackoverflow.com/q/38832384/1679310)。

这段代码可以在node_modules\@uirouter\core\lib-esm\上使用(最后是\lib-esm )。要使用它,我们需要调整UIRouterHybridResolver插件:

代码语言:javascript
运行
复制
class UIRouterHybridResolver 
{
    resolveId(id, from)
    {
        if (id.startsWith("@uirouter/core"))
        {
            return `${__dirname}/node_modules/@uirouter/core/lib-esm/index.js`;
        }
        if (id.startsWith("@uirouter/angular-hybrid"))
        {
            return `${__dirname}/node_modules/@uirouter/angular-hybrid/lib/angular-hybrid.js`;
        }
    }
}
const uIRouterHybridResolver = () => new UIRouterHybridResolver();

我们还必须确定,这将是我们导出的配置的第一个插件:

代码语言:javascript
运行
复制
export default {
    entry: "src/main.js",
    dest: "src/build.js", 
    ...
    plugins: [       
        uIRouterHybridResolver(),
        commonjs({
            include: [
                "node_modules/rxjs/**"
            ]
        }),
        ...

注意:另外,commonjs插件不需要(不应该有) "node_modules/@uirouter/core/**",只包括"node_modules/rxjs/**"

...and就是这样..。混合UIRouter与AOT正在工作.

延展

另外,请确保我们遵循这里描述的说明:https://www.npmjs.com/package/@uirouter/angular-hybrid。大多数情况下,package.json包含--仅键@uirouter/angular-hybrid

代码语言:javascript
运行
复制
dependencies: {
  ...
  "@angular/common": "^4.0.0",
  "@angular/compiler": "^4.0.0",
  "@angular/core": "^4.0.0",
  "@angular/platform-browser": "^4.0.0",
  "@angular/platform-browser-dynamic": "^4.0.0",
  "@angular/upgrade": "^4.0.0",
  ...
  "@uirouter/angular-hybrid": "3.1.2",
  ...

也就是说,不要附加诸如"@uirouter/angular": "1.0.0-beta.7"等内容,最后通过调用npm i来确保依赖项是最新的。

票数 4
EN

Stack Overflow用户

发布于 2017-08-15 22:41:21

@uirouter/angular-hybrid的3.1.4版本解决了导致此问题的根本问题。module:条目在package.json中应该指向ES6模块文件。但是,它指向的是无效路径。在3.1.4中,它再次指向正确的路径。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45506379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档