8
votes

Comment forcer le moteur d'application télécharger node_modules

Dans mon projet, nous utilisons Nodejs avec TypeScript pour le développement de l'application de moteur de Google Cloud APP. Nous avons notre propre mécanisme de construction pour compiler des fichiers TS dans JavaScript, puis les collecter dans un package exécutable complet, de sorte que nous ne voulons pas relâcher sur Google Cloud pour installer des dépendances, nous souhaitons télécharger tous les packages de nœuds à l'intérieur du nœud_modules vers Cloud Google.

Mais il semble que Google Cloud ignore toujours le dossier Node_Modules et exécutera une installation NPM pendant le déploiement. Même j'ai essayé de supprimer 'Skip_files: - ^ node_modules $' d'app.Yaml, il ne fonctionne pas, Google Cloud installera toujours des paquets par lui-même.

Est-ce que quelqu'un a des idées de cela de déployer l'application de nœud avec node_modules ensemble? Merci.


0 commentaires

3 Réponses :


5
votes

J'ai observé le même problème.

Ma solution de contournement était de renommer nœud_modules / à nœud_modules_hack / avant de déployer. Cela empêche l'appengine de le retirer.

Je le restaore au nom d'origine sur l'installation, avec le fichier (partiel) package.json fichier: xxx

Vous pouvez confirmer que Appengine bande votre nœud_modules / en regardant l'image Docker qu'il génère. Vous pouvez le trouver sur le page d'images . Ils vous donnent une ligne de commande que vous pouvez exécuter sur la console de nuages ​​pour le chercher. Ensuite, vous pouvez exécuter docker exécuter ls pour voir la structure de votre répertoire. L'image est créée après NPM Installez , donc une fois que vous utilisez la solution de contournement ci-dessus, vous verrez votre nœud_modules / là-bas.


2 commentaires

mv -fn node_modules_hack node_modules <- Quelle langue est-ce?


Je ne sais pas si c'est une bonne idée car il y a beaucoup de packages NPM qui sont spécifiques à la plate-forme (OS) Node_Modules spécifiques et pré-installés pourraient échouer sans que vous ayez une idée de ce qui s'est passé



1
votes

La nouvelle solution consiste à autoriser node_modules dans .gclouceignore .

ci-dessous est le .gclouignore (une exécution initiale de < Code> GCloud App déployer génère si vous n'en avez pas déjà un déjà) avec le changement dont vous avez besoin: xxx


0 commentaires

0
votes

Autoriser node_modules code> dans .gclouceignore code> ne fonctionne plus.

Application du déploiement du moteur est Switched to BuildPacks depuis oct / nov. 2020. Le cloud Build Étape déclenché par il supprimera toujours le téléchargement téléchargé nœud_modules CODE> Dossier et réinstallez les dépendances à l'aide de la fil ou du NPM. P>

Voici le code Buildpack associé: https://github.com/GoogleCloudPlatform/ Buildpacks / BLOB / 89F4A6BA669437A47B482F4928F9742F4928F974D8B3EE666D / CMD / NodeJs / Fil / Main.go # L60 P>

Il s'agit d'un comportement souhaitable depuis téléchargé nœud_modules code> pourrait venir d'une plate-forme différente et pourrait casser la compatibilité avec Linux coureur utilisé pour exécuter votre application dans l'environnement de moteur d'application. P>

Ainsi, afin de passer des dépendances NPM / Fils Installation dans Cloud Build, je suggérerais: P>

  • Utilisez Linux Runner CI avec la même version de nœud que vous utilisez dans l'environnement de moteur d'application. P> li>

  • Créez des archives de goudron avec votre node_modules code>, pour ne pas télécharger de multitude de fichiers sur chaque application gcloud Applob p>. p>. p>. li>

  • garder nœud_modules code> diranté ignoré dans .gclouignore code>. p> li>

  • Déballez node_modules.tar.gz code> archive dans PreInstall code> Script. N'oubliez pas de garder la compatibilité en arrière dans les archives de goudron (développement local, etc.): p> li> ul> xxx pré>

    note ... || vrai code> chose. Cela garantira que le script Preinstall renvoie le code de sortie zéro quel que soit l'installation de fil / NPM continuera. P>

    Github Actions Workflow Pour emballer et télécharger vos dépendances pour le déploiement des moteurs App pourrait ressembler à ceci: p>

      deploy-gae:
        name: App Engine Deployment
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v2
    
          # Preferable to use the same version as in GAE environment
          - name: Set Node.js version
            uses: actions/setup-node@v2
            with:
              node-version: '14.15.4'    
    
          - name: Save prod dependencies for GAE upload
            run: |
              yarn install --production=true --frozen-lockfile --non-interactive
              tar -czf node_modules.tar.gz node_modules
              ls -lah node_modules.tar.gz | awk '{print $5,$9}'
    
          - name: Deploy
            run: |
              gcloud --quiet app deploy app.yaml --no-promote --version "${GITHUB_ACTOR//[\[\]]/}-${GITHUB_SHA:0:7}"
    


0 commentaires