MCPcopy
hub / github.com/lavas-project/lavas / server

Method server

packages/lavas-core-vue/core/webpack.js:376–471  ·  view source on GitHub ↗

* generate webpack server config based on lavas config * * @param {Object} internalBuildConfig build config * @return {Object} webpack server config

(internalBuildConfig = {})

Source from the content-addressed store, hash-verified

374 * @return {Object} webpack server config
375 */
376 async server(internalBuildConfig = {}) {
377 /* eslint-disable fecs-one-var-per-line */
378 let {extend, extendWithWebpackChain, nodeExternalsWhitelist = [],
379 babel,
380 defines: {server: serverDefines = {}},
381 alias: {server: serverAlias = {}},
382 plugins: {base: basePlugins = [], server: serverPlugins = []}
383 } = Object.assign({}, this.config.build, internalBuildConfig);
384 /* eslint-enable fecs-one-var-per-line */
385
386 let serverConfig = await this.base(Object.assign(internalBuildConfig, {
387 babelOptions: this.generateBabelOptions(babel, false)
388 }));
389
390 // set target & output
391 serverConfig
392 .target('node')
393 .output
394 .filename('server-bundle.js')
395 .libraryTarget('commonjs2');
396
397 // add alias for server
398 Object.keys(serverAlias).forEach(aliasKey => {
399 serverConfig.resolve.alias.set(aliasKey, serverAlias[aliasKey]);
400 });
401
402 /**
403 * Generally in ssr, we don't need any loader to handle style files,
404 * but some UI library such as vuetify will require style files directly in JS file.
405 * So we still add some relative loaders here.
406 */
407 this.addStyleRules(serverConfig, {
408 cssSourceMap: false,
409 cssMinimize: false,
410 cssExtract: false
411 });
412
413 // https://webpack.js.org/configuration/externals/#externals
414 // https://github.com/liady/webpack-node-externals
415 serverConfig.externals(nodeExternals({
416 // do not externalize CSS files in case we need to import it from a dep
417 whitelist: [...nodeExternalsWhitelist, /\.(css|vue)$/]
418 }));
419
420 // modify vars in DefinePlugin
421 serverConfig.plugin('define').init((Plugin, args) =>
422 new Plugin(Object.assign(args[0], {
423 'process.env.VUE_ENV': '"server"',
424 'process.env.NODE_ENV': `"${this.env}"`
425 }, serverDefines)));
426
427 // add vue-ssr-server-plugin
428 serverConfig.plugin('ssr-server').use(VueSSRServerPlugin, [{
429 filename: join(LAVAS_DIRNAME_IN_DIST, SERVER_BUNDLE)
430 }]);
431
432 // call extendWithWebpackChain function if provided
433 let extendWithWebpackChainArray = [

Callers 4

getTemplateMethod · 0.80
addSkeletonPluginMethod · 0.80
createSSRServerConfigMethod · 0.80

Calls 4

baseMethod · 0.95
generateBabelOptionsMethod · 0.95
addStyleRulesMethod · 0.95
initMethod · 0.45

Tested by

no test coverage detected