8 votes

new Worker() ne sera groupé que si on lui passe une chaîne de caractères.

Je suis en train d'essayer les web workers pour exécuter un script d'analyse de données qui prend beaucoup de temps dans mon application Angular 8, mais j'ai quelques difficultés à regrouper le worker. Je cherche de l'aide pour comprendre ce qui me manque.

J'ai généré un nouveau travailleur pour mon projet en utilisant les schémas inclus avec Angular-CLI 8.0.2 :

ng g webWorker suggestions --project=my-project

Cela génère une nouvelle suggestions.worker.ts y tsconfig.worker.ts et met à jour mon tsconfig.app.json , angular.json y package.json . Ils me semblent corrects, mais je peux fournir des détails si nécessaire.

J'ai déplacé mon suggestions.worker.ts dans le même dossier que le service qui instanciera le travailleur. La fonction d'instanciation du travailleur se présente comme suit :

async calculateSuggestions<T>(
    data: T[]
): Promise<Suggestions<T>> {
    const worker = new Worker('./suggestions.worker', {
      type: 'module',
    });

    const result = new Promise((resolve, reject) => {
      worker.onmessage = ({ data }) => {
        resolve(data);
      };

      worker.onerror = ({ error }) => {
        reject(error);
      };
    }) as Promise<Suggestions<T>>;

    worker.postMessage({
      data: data
    });

    return result;
}

Cependant, lorsque je construis mon projet, l'avertissement et l'erreur suivants apparaissent :

WARNING in new Worker() will only be bundled if passed a String.

ERROR in chunk suggestions-suggestions-module
suggestions-suggestions-module.js
{..} \node_modules\@ngtools\webpack\src\index.js! {..} \src\app\extractor\
No template for dependency: ConstDependency

Je pense que je n'ai pas instancié le fichier Worker correctement, ce qui fait échouer le processus de regroupement.

L'avertissement semble indiquer que je devrais passer un fichier String à la Worker mais je le fais déjà.

En outre, le chemin derrière le point d'exclamation à la ligne 3 de l'erreur est en fait deux dossiers au-dessus de l'endroit où je stocke mon service et mes fichiers de travail. Peut-être est-ce un indice ?

Toute suggestion sera très appréciée !

1voto

Leon Points 100

La solution est ici https://github.com/angular/angular-cli/issues/14776#issuecomment-516998921 Il suffit donc d'ajouter le deuxième paramètre comme ci-dessous

new Worker("file path", { type: "module" });

0voto

thijsfranck Points 142

J'ai résolu ce problème en rétrogradant vers angular-cli@8.0.1. Je ne suis toujours pas sûr de la cause profonde du problème.

0voto

AbhijithKA Points 66

Pour éviter

... will only be bundled if passed options that include { type: 'module' }.. "ajouter

new Worker('./testworker.worker', { type: "module" });

Pour éviter

No template for dependency: ConstDependency
  • Vérifier s'il y a un décalage de version de webpack
  • Voir la sortie de node ls . Il devrait y avoir deux versions différentes de webpack@4.x.x
  • Pour résoudre ce problème, supprimez votre dépendance webpack de package.json ou essayez de npm prune
  • Supprimez le dossier 'node_modules' et 'package-lock.json'.
  • Exécuter npm i
  • Exécuter ng serve o ng build

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X