2017-07-06 1 views
1

Je veux savoir s'il existe un moyen facile de télécharger un fichier avant d'exécuter d'autres codes. J'ai besoin que le fichier file.js soit téléchargé en premier sur mon serveur car j'en ai besoin dans mon application à différents endroits. Je sais que je peux faire quelque chose comme ça. Mais si je suppose correctement, le fichier est écrit de façon asynchrone. Donc quand j'ai besoin de ce fichier, j'ai juste un objet vide ou une erreur.Télécharger le module sur le démarrage NPM

Alors, quel est le meilleur moyen de télécharger ce fichier de manière synchrone au début de npm?

Répondre

2

Vous pouvez obtenir ce résultat en utilisant des pré-hooks de script npm. En supposant que votre script de démarrage est appelé "start", dans votre package.json, ajoutez le script appelé "prestart" dans lequel vous voulez exécuter un script qui exécute le téléchargement de fichiers. et sera exécuté automatiquement lorsque vous appelez npm run start

Par exemple:

package.json:

{ 
    "name": "test", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "start": "node index.js", 
    "prestart": "node pre-start.js" 
    }, 
    "author": "", 
    "license": "ISC" 
} 

index.js:

const value = require('./new-file.json'); 
console.log(value); 

pré-start.js:

const fs = require('fs'); 

setTimeout(function() { 
    const value = { 
     "one" : 1, 
     "two" : 2 
    }; 

    fs.writeFileSync('new-file.json', JSON.stringify(value)); 
}, 1000) 

Voici un lien vers l'article avec des informations plus détaillées: http://www.marcusoft.net/2015/08/pre-and-post-hooks-for-npm-scripting.html

L'autre façon est d'exécuter votre code après l'autre fichier est écrit:

let file = fs.createWriteStream(path.join(__dirname, 'file.js')); 
let request = http.get("http://expample.com/file.js", 
    function(response) { 
    response.pipe(file); 
    file.on('finish',function(){ 
     // run your code here 
    } 
}); 
+0

Merci. Exactement ce dont j'avais besoin. –