2017-10-08 22 views
0

J'utilise prerender-spa-plugin dans mon projet Vue Webpack Cli. Comme de la documentation que je me inscris le plugin dans webpack.prod.conf.js comme ceget Liste des routes via axios dans Vue Webpack Cli

... 
plugins: [ 
    ... 
    new PrerenderSpaPlugin(
    path.join(__dirname, '../dist'), 
    ['/', '/about', '/contact'], 
    { 
     captureAfterTime: 5000 
    } 
) 
] 

Je me demande s'il serait possible d'obtenir la liste des itinéraires tableau par un appel Axios. Je essayé ce qui suit sans succès:

var routes = axios.get('http://myapi.com/api').then(function (response) { 
    return response.map(function (response) { 
    return '/base/' + response.slug 
    }) 
}) 

plugins: [ 
    ... 
    new PrerenderSpaPlugin(
    path.join(__dirname, '../dist'), 
    routes, 
    { 
     captureAfterTime: 5000 
    } 
) 
] 

Depuis ma connaissance Javascript est pauvre, je ne suis pas en mesure de résoudre ce problème. Merci pour tous les conseils.

Meilleures salutations

Répondre

0

Ce actuellement ne fonctionnera pas (ou travailler au moins fiable) car Webpack suppose que votre configuration est synchrone par défaut. Pour contourner ce problème, utilisez la prise en charge de Webpack pour asynchronous configuration et renvoyez une promesse résolue après la demande de route.

Si vous êtes dans un environnement qui prend en charge async/await (nœud 8+), c'est aussi simple que d'exporter une fonction async. Dans le cas contraire, le retour d'un new Promise:

// webpack.conf.js 
module.exports = async function() { 
    const response = await axios.get('http://myapi.com/api') 
    const routes = response.map((response) => { 
    return '/base/' + response.slug 
    }) 

    return { 
    plugins: [ 
     // ... 
     new PrerenderSpaPlugin(
     path.join(__dirname, '../dist'), 
     routes, 
     { 
      captureAfterTime: 5000 
     } 
    ) 
    ] 
    } 
} 

Si ce n'est pas une option, vous pouvez toujours avoir une tâche qui fait cette demande, écrit dans un fichier json, puis require('./route-response.json') dans votre config.