Ленивая загрузка не может найти модуль - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в nativescript - только что установил, так что все должно быть в курсе.Я пытался заставить ленивую загрузку работать, следуя руководству на сайте nativescript:

https://docs.nativescript.org/performance-optimizations/lazy-loading#implementing-lazy-loading-in-nativescript

Я следовал руководству к письму, только добавляя пустой сервиси предоставление компоненту строки шаблона.При запуске в эмуляторе Android я получаю следующее исключение:

 JS: ERROR Error: Uncaught (in promise): Error: com.tns.NativeScriptException: Failed to find module: "feature/feature.module", relative to: app/tns_modules/
JS:     com.tns.Module.resolvePathHelper(Module.java:146)
JS:     com.tns.Module.resolvePath(Module.java:55)
JS:     com.tns.Runtime.callJSMethodNative(Native Method)
JS:     com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1116)
JS:     com.tns.Runtime.callJSMethodImpl(Runtime.java:996)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:983)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:967)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:959)
JS:     com.tns.gen.java.lang.Object_view_31_32_TouchListenerImpl.onTouch(Object_view_31_32_TouchListenerImpl.java:18)
JS:     android.view.View.dispatchTouchEvent(View.java:11721)
JS:     android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
JS:     android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
JS:     android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
JS:     android.view.ViewGroup.dispatchTouchEvent(...
Executing before-prepare hook from C:\apps\stoiccompanion\hooks\before-prepare\nativescript-dev-typescript.js
Hook skipped because either bundling or livesync is in progress.
Preparing project...
Project successfully prepared (Android)
Successfully transferred app.routing.js.
Refreshing application...
Successfully synced application org.nativescript.StoicCompanion on device emulator-5554.
JS: Angular is running in the development mode. Call enableProdMode() to enable the production mode.

Я пробовал различные формы пути, включая ~ /, / ./ и т. Д., Но все еще не радует.

Я также пытался использовать tns update на случай, если что-то устарело.Оглядываясь в Интернете, я вижу несколько похожих проблем на их github, который обнаружил несколько потенциальных клиентов (убедитесь, что нет имен в верхнем регистре и т. Д.), Но мне не повезло.

Если это имеет значение, я 'm с использованием Windows 10.

Существуют ли какие-либо распространенные ошибки, которые я должен искать, или есть какие-либо инструменты или журналы, которые я могу исследовать, чтобы попытаться получить более подробную информацию?

Вот мое приложение.route

// app/app.routing.ts
import { NgModule } from "@angular/core";
import { NativeScriptRouterModule } from "nativescript-angular/router";
import { Routes } from "@angular/router";

import { ItemsComponent } from "./item/items.component";
import { ItemDetailComponent } from "./item/item-detail.component";

const routes: Routes = [
    { path: "", redirectTo: "/items", pathMatch: "full" },
    { path: "items", component: ItemsComponent },
    { path: "item/:id", component: ItemDetailComponent },
    { path: "feature", loadChildren: "~/feature/feature.module#FeatureModule" }, // lazy loaded module
];

@NgModule({
    imports: [NativeScriptRouterModule.forRoot(routes)],
    exports: [NativeScriptRouterModule]
})
export class AppRoutingModule { }

Структура каталогов моего приложения:

  • src
    • app
      • feature
        • feature.component.ts
        • feature.module.ts
        • feature.service.ts
        • feature.routing.ts
    • app.module.ts
    • app.routing.ts
    • и т. Д.

Редактировать

Написал большую правку, затем нашел опечатку в именах файлов.Исправлено, и теперь оно будет работать.Тем не менее, я все еще не могу использовать loadChildren: в маршрутизаторе уровня приложения с использованием относительного пути ./app/feature/... работает, но ~/feature/... не работает.

Обновление до ~ / feature приводит к следующему исключению:

JS: Angular is running in the development mode. Call enableProdMode() to enable the production mode.
JS: ERROR Error: Uncaught (in promise): Error: com.tns.NativeScriptException: Failed to find module: "~/feature/feature.module", relative to: /app/
JS:     com.tns.Module.resolvePathHelper(Module.java:146)
JS:     com.tns.Module.resolvePath(Module.java:55)
JS:     com.tns.Runtime.callJSMethodNative(Native Method)
JS:     com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1116)
JS:     com.tns.Runtime.callJSMethodImpl(Runtime.java:996)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:983)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:967)
JS:     com.tns.Runtime.callJSMethod(Runtime.java:959)
JS:     com.tns.gen.java.lang.Object_view_31_32_TouchListenerImpl.onTouch(Object_view_31_32_TouchListenerImpl.java:18)
JS:     android.view.View.dispatchTouchEvent(View.java:11721)
JS:     android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
JS:     android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
JS:     android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
JS:     android.view.ViewGroup.dispatchTouchEvent(ViewGroup...

В моем файле tsconfig есть следующая запись:

"paths": {
            "~/*": [
                "src/*"
            ],
            "*": [
                "./node_modules/tns-core-modules/*",
                "./node_modules/*"
            ]
        }

Я нашел следующую ссылку, которая подразумевает, что я должен обновить ~ / alias, чтобы он указывал на / app, что я пробовал, новсе еще была та же проблема.Я также пытался обновить с ./src/app

https://github.com/NativeScript/nativescript-dev-webpack/issues/372

1 Ответ

0 голосов
/ 25 марта 2019

Я столкнулся с той же проблемой.Я баловался, и это работало, добавляя ./app/ строку внутри loadChildren, например Внутри app-routing.module.ts

const routes: Routes = [
{
    path: "",
    redirectTo: "/home",
    pathMatch: "full"
},
{
    path: "home",
    component: HomeComponent

},
{
    path: "collection",
    loadChildren: "./app/collection/collection.module#CollectionModule"
},
{
    path: "product",
    loadChildren: "./app/product/product.module#ProductModule"
}
];

, и она работала, если перенаправлялась в модуль с отложенной загрузкой из компонента, например из home.component.html

<Button text="home works!" class="btn btn-primary" [nsRouterLink]="['/collection']"></Button>

и это работает, если вы делаете лениво загруженный модуль в качестве первого маршрута.Но все это также будет зависеть от структуры проекта, обычно в угловом у вас есть структура, где вы помещаете модули в папку приложения, например, так:

enter image description here

...