dootask/webpack.mix.js
2023-02-21 20:58:45 +08:00

66 lines
1.7 KiB
JavaScript
Vendored

const mix = require('laravel-mix');
const ipv4 = require('internal-ip').v4.sync();
const execSync = require('child_process').execSync;
const argv = process.argv;
const 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, '/');
}
const hmrPublicURL = function (port) {
try {
return execSync('gp url ' + port + ' &> /dev/null').toString().trim()
} catch (e) {
return null
}
}
const devPort = 22222
const publicURL = hmrPublicURL(devPort)
const isHot = argv.includes('--hot');
const isElectron = argv.includes('--electron');
const 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(() => {
let config = {
output: {
chunkFilename: ({chunk}) => {
return `js/build/${mixBuildName(chunk.id)}.js`
}
},
};
if (isHot) {
if (publicURL) {
config.output.publicPath = publicURL + '/'
}
} else {
if (isElectron) {
config.output.publicPath = './'
}
}
return config
})
.options({
processCssUrls: false,
hmrOptions: {
host: ipv4 || 'localhost',
port: devPort,
publicURL
},
})
.vue({
version: 2,
});