To dynamically load javascript module/code, use the following syntax.
const consolePromise = import(/* webpackChunkName: "console" */ './modules/console/index')consolePromise.then((module) => { module = module.default module.init()})
If you need to expose Promise to browser javascript which might not support it yet (e.g. IE), you can convert it to a callback.
function loadConsole(callback = null) {
return import(/* webpackChunkName: "console" */ './modules/console/index')
.then((module) => {
module = module.default
if (callback != null) {
callback(module)
}
})
}
Sample code for ./modules/console/index.js
. Content of this javascript or any javascript import by this file shall be bundled together as console.js
and loaded dynamically.
export default { init() { console.log('I am console') }}
If you are loading hot reload (http://localhost:8080/app.js) on external server (e.g. nginx
), you would want to configure vue.config.js
with the following (else the dynamic loading path for console.js
would be incorrect).
const path = require('path')const webpack = require('webpack')module.exports = { devServer: { headers: { "Access-Control-Allow-Origin":"\*" }, }, assetsDir: process.env.NODE_ENV === 'production' ? 'static/vue' : 'http://localhost:8080/', baseUrl: process.env.NODE_ENV === 'production' ? '/' // mess up assetsDir if this is blank : 'http://localhost:8080/',}
Notice static/vue
for assetsDir
for production (npm run build
). I am serving css and js from /static/vue/css/(chunk-vendors|app|console).<HASH>.(js|css)
on my production server.
References: