-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Open
Description
What problem does this feature solve?
Allow for asynchronous actions within vue.config.js. The specific use-case I'm looking at right now is the need to prerender dynamic routes based on data returned by an api. I'm found a few things online but nothing that appears to work with vue cli 3.x
What does the proposed API look like?
Await the result of the configureWebpack
or chainWebpack
methods:
const path = require('path')
const axios = require('axios')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
module.exports = {
configureWebpack: async () => {
const { data } = await axios.get('http://some-api.com/companies')
const { companies } = data
return {
plugins: [
new PrerenderSPAPlugin({
// Required - The path to the webpack-outputted app to prerender.
staticDir: path.join(__dirname, 'dist'),
// Required - Routes to render.
routes: [ '/' ].concat(companies.map(company => `/companies/${company}`))
})
]
}
}
}
jonaskuske, evilsprut, abrenneke, danielbeck, Priestch and 23 more
Metadata
Metadata
Assignees
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
LinusBorg commentedon Jan 19, 2019
That could make sense, but would also be a lot of work and possibly a breaking change. We will have to have a thorough look at this.
Meanwhile, you can use a local plugin file to write your own wrapper around
build
and do the async fetching before actually running build:package.json:
build.prerender.js
Usage in package.json:
nickforddev commentedon Jan 21, 2019
Awesome, I had worked around it with a prebuild npm hook but that required saving the data to the filesystem, your solution is a bit cleaner, thank you.
nickforddev commentedon Jan 21, 2019
@LinusBorg is there any official documentation for this api? I noticed that the build output from your example is significantly different that the output of
vue-cli-service build
and would like to read more about it.LinusBorg commentedon Jan 21, 2019
The build command itself is completely the same, but of course the pretender plugin changes behaviour.
What differences do you see?
As far as documentation goes, the Plugin dev guide is not as fleshed out yet as we want it to be, but the basics can be found there.
The bit about a local plugin is found in the guide under plugins & presets -> local plugin
nickforddev commentedon Jan 21, 2019
Thank you, I'll take a look. I figured out why the output was different,
NODE_ENV
was undefined 💯.What is the best way to deal with that? Seems like
vue-cli-service build
automatically sets the environment to production, do I have to set the env variable in the npm script manually?Edit: Asked prematurely, found the answer here https://cli.vuejs.org/dev-guide/plugin-dev.html#service-plugin
LinusBorg commentedon Jan 21, 2019
Oh right, forgot to add a default mode for the command. Sorry.
I'll fix my example code.
configure prerendering
Upgrade (#41)
patarapolw commentedon Aug 21, 2019
If need both
build:async
andserve:async
, currently, I have to... (invue.async.config.js
)There should be a single Vue Config object, therefore, a more elegant way to do this...
githoniel commentedon Oct 22, 2019
I'm write a excel web-addin and it's dev-mode need to load https Cert like below
I had to split the async code into a new js file and run by
node xxx.js
to get it workmaybe vue.config.js support exports an async function is a good solution here
WormGirl commentedon Aug 5, 2020
How to change the devServer option? I want to do something like this:
ignore, this is worked.
its-tim-lee commentedon Dec 26, 2022
@LinusBorg
What about if I can' use Service Plugin, and I also can't use any webpack compiler hook?
Does Vue Cli provide any way to run once-time async code when I...
npm run serve
)FYI, I knew that can be achieved by using Vite's
configResolved
.But does that mean Vue Cli can't do that?