const mix = require('laravel-mix'); const ipv4 = require('internal-ip').v4.sync(); const argv = process.argv; let mixBuildName = function (str) { if (typeof str !== "string") { return str; } if (/resources_assets_js_pages_(.*?)_vue/.test(str)) { str = /resources_assets_js_pages_(.*?)_vue/.exec(str)[1]; } return str.replace(/_/g, '/'); } let isHot = argv.includes('--hot'); let isElectron = argv.includes('--electron'); let publicPath = (!isHot && isElectron) ? 'electron/public' : 'public'; mix .copy('resources/assets/statics/public', publicPath) .js('resources/assets/js/app.js', 'js') .sass('resources/assets/sass/app.scss', 'css') .setPublicPath(publicPath) .webpackConfig(webpack => { let config = { output: { chunkFilename: ({chunk}) => { return `js/build/${mixBuildName(chunk.id)}.js` } }, plugins: [ new webpack.DefinePlugin({ '__IS_ELECTRON': isElectron, }) ] }; if (isElectron) { config.target = 'electron-renderer' if (!isHot) { config.output.publicPath = './' } } return config }) .options({ processCssUrls: false, hmrOptions: { host: ipv4 || 'localhost', port: '22222' }, }) .vue({ version: 2, });