Nodo JS: blocco delle dipendenze prima del test e della distribuzione? Controlla in node_modules?

1

Supponiamo di avere un'applicazione NodeJS. Una versione potrebbe consistere in più passaggi:

  1. Test automatici e / o manuali
  2. distribuzione
  3. (se qualcosa va storto) Rollback all'ultima versione stabile

Ci sono alcuni requisiti desiderabili riguardo le dipendenze dell'applicazione:

  • Una volta eseguito il test, si desidera distribuire esattamente la versione con cui si è verificato, incluse tutte le dipendenze.
  • Lo stesso vale per i rollback: vuoi ripristinare non solo il tuo codice, ma anche tutte le dipendenze esterne.

La mia domanda riguarda le migliori pratiche per raggiungere questi obiettivi.

Qual è il modo consigliato per creare un'istantanea di tutte le dipendenze dell'applicazione NodeJS?

Ecco tre opzioni a cui posso pensare:

  1. In questo articolo , l'autore consiglia di mettere la directory node_modules sotto il controllo del codice sorgente. (Non per tutti i moduli, ma solo per i moduli che verranno distribuiti.)

  2. Un'alternativa, che lo stesso articolo descrive come anti-pattern, consiste nell'usare il blocco della versione esplicita. La sua argomentazione sembra ragionevole: quando blocchi, ad esempio, Express in una certa versione, non puoi ancora controllare che una delle sue dipendenze non abbia introdotto un bug subtile, più tardi.

  3. Semplicemente non ti interessa e usa sempre la versione più recente di tutti i moduli esterni.

I miei pensieri finora (ma non ho ancora molta esperienza con NodeJS):

  • 3) sembra troppo avventato.
  • Tendo a 1), ma non sono sicuro di dove mettere il node_modules . Quando lo controlli insieme al tuo codice normale, temo che flussi di lavoro come npm link ai tuoi moduli locali non funzionino più. Inoltre, c'è sempre il problema di fastidiosi conflitti di fusione.
posta Philipp Claßen 09.07.2013 - 00:13
fonte

2 risposte

1

Puoi utilizzare npm shrinkwrap per implementare l'opzione n. 2 e bloccare tutte le dipendenze secondarie. Dal doc:

This command locks down the versions of a package's dependencies so that you can control exactly which versions of each dependency will be used when your package is installed. The "package.json" file is still required if you want to use "npm install".

    
risposta data 09.07.2013 - 00:37
fonte
-1

Non capisco il tuo nead di un controllo della versione node_modules. Voglio dire, puoi facilmente definire quale versione deve avere la dipendenza:

{
    "name": "native-gpio",

    "version": "0.0.6",

    "description": "sysfs GPIO wrapper for node.js",

    "author": "Bodo Kaiser <[email protected]>",

    "license": "MIT",

    "keywords": ["gpio", "addon"],

    "main": "lib/index.js",

    "gypfile": true,

    "scripts": {
        "test": "make test",
        "install": "make install"
    },

    "dependencies": {
        "node-gyp": "0.10.6"
    },

    "devDependencies": {
        "mocha": "1.12.0",
        "chai": "1.7.2"
    },

    "repository": {
        "type": "git",
        "url": "git://github.com/bodokaiser/node-native-gpio.git"
    },

    "bugs": {
        "url": "https://github.com/bodokaiser/node-native-gpio/issues"
    }
}
    
risposta data 14.07.2013 - 11:24
fonte

Leggi altre domande sui tag