【问题标题】:Multipage App - EXT JS 6 - Package (404)多页应用程序 - EXT JS 6 - 包 (404)
【发布时间】:2016-10-12 14:07:57
【问题描述】:

我有一个多页面应用程序,已从 EXT JS 6(单页面应用程序)迁移到工作空间(ext JS 6)。

我已经拆分了一些常见的部分,例如我的应用程序标题和一些自定义输入组件。这些我已放入一个包中(因为我的工作空间中的多个“应用程序”正在访问它们。

我的问题是我有一个运行良好的页面(工作空间应用程序),找到它需要的所有文件并且运行良好。

另一个页面(相同的工作空间,单独的应用程序)不工作,它正在寻找 404 的文件(404-ing 因为它在错误的目录中查找)

APP.JSON 我已经浏览了 app.json 文件,并准确地告诉它要使用哪些包。这在两个应用程序中是相同的。

类路径 我还没有触及这两个应用程序的 ClassPath。所以它们仍然是相同的。

App 1 (page1) 在我的包中查找文件:

http://localhost/packages/local/page/src/store/file.js

App 2 (page2) 查找相同的文件:

http://localhost/App2/store/file.js

我已经运行了 sencha cmd 并且没有任何错误

sencha app refresh
sencha app build

所有我能想到的应该在这里有所作为的东西都经过检查和重新检查;

所以提问时间: - Sencha Cmd 为什么/如何测试文件是否存在于特定位置? - 为什么在这种情况下会出错? - 我可能会遗漏哪些配置选项和问题?

编辑:

我刚刚找到并运行以下命令:

C:\Development\workspaces\e\e\app1>sencha app explain "testapp.store.Locale"
Sencha Cmd v6.2.0.46
[INF] Loading app json manifest...
[INF] Loading classes...
[INF] Gathering dependencies...
"edited"\sencha-compiler\app\full-page-master-bundle.js
    (@require file.js)
      --> e\app1\app.js
            e\app1\app.js:6 (Ext.require)
              (config)
                --> packages\local\page\src\store\Locale.js





C:\Development\workspaces\e\e\app2>sencha app explain "testapp.store.Locale"
    Sencha Cmd v6.2.0.46
    [INF] Loading app json manifest...
    [INF] Loading classes...
    [INF] Gathering dependencies...
        "edited"\sencha-compiler\app\full-page-master-bundle.js
        (@require file.js)
        --> e\app2\app.js
            e\app2\app.js:6 (Ext.require)
            (config)
            --> packages\local\page\src\store\Locale.js

看起来它告诉我 App2 在配置中具有正确的路径...(感觉就像我发现了一个错误)

【问题讨论】:

  • 包名是什么,App1和App2的应用名是什么?
  • 包名称是“page”,两个应用程序都称为“testapp”(是的,这可能是不好的做法,但为了简单起见,我需要这样做,同时我完成从单个应用程序迁移应用到工作区设置。
  • 哦,是的,包被命名为页面,但里面的声明也是 testapp ......我意识到这一定是令人困惑的事情,但我不能解决这个问题处理构成更广泛应用的 6000 多个文件。
  • 是的,这不仅仅是一个简单的搜索和替换操作,大约需要半个小时。让我看看我是否找到了方法,它在我的内部文档中的某个地方。
  • 哦,我可以做一个简单的“grep ... xargs sed -i ...”来搜索和替换所有内容,但是(我已经做过一次并遇到了问题)然后我必须处理那些没有放在正确位置的文件,这些文件被调整到“组”的适当(app1、app2、app3)位置。然后是某物寻找被移动的东西……真是头疼。希望如果我能把所有东西都放在正确的地方,然后把它作为最后一步,我希望它能让我省去很多头痛

标签: javascript extjs extjs6 sencha-cmd


【解决方案1】:

听起来您在使用 Ext.Loader 配置时遇到了问题。从 cmets 看来,您似乎在包和测试应用程序中都使用了相同的根命名空间。问题是 Ext.Loader 会将命名空间映射到文件位置。得到错误的映射,你就会看错地方。

最简单的答案是确保包和应用程序的命名空间有所不同。这可能意味着更改前缀(例如MyPackage 与MyApp),或具有多级命名空间(MyStuff.package 与MyStuff.app)。后者是 ExtJS 本身的组织方式。

一个地方是为应用程序生成的classic.json。该文件由引导进程使用,它有一个它找到的所有类的列表,以及该类相对于应用程序所在的位置。 (我建议先对其进行一些漂亮的打印格式,因为它都是一行)。检查它是否有您要查找的类名,以及路径是什么。

...
"classes": {
    ...
    "Ext.Ajax": {
        "alias": [],
        "alternates": [],
        "idx": 43
    },
    ...
},
...
"loadOrder": {
    ....
    {
        "idx": 43,
        "path": "../ext-6.2.0/packages/core/src/Ajax.js",
        "requires": [
            42
        ],
        "uses": []
    },
    ....
},
...
"paths": {
    "Ext": "../ext-6.2.0/classic/classic/src",
    ....
    "Ext.Ajax": "../ext-6.2.0/packages/core/src/Ajax.js",
    ...
},
...

paths 部分是关键部分。在上面,查看如何有一个用于命名空间 (Ext) 和另一个用于文件 (Ext.Ajax)。如果应用程序代码想要加载对paths 部分中的类not 的引用,它会在类命名空间中找到最长的匹配项并在该目录中查找。

【讨论】:

  • 很好的答案,谢谢。原来是一个不同的错误,但这是一个很好的解释,已经有所帮助:)谢谢。
  • 只是好奇,有 sencha Cmd 方式或重新生成 Path 文件吗?反正我可能需要这个。
  • classic.json(及其对应的modern.json)以及bootstrap.js 文件在sencha app bootstrap 期间更新。这被称为构建的一部分,我认为是sencha app refresh 的一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
相关资源
最近更新 更多