142 lines
3.5 KiB
JavaScript
Executable File
142 lines
3.5 KiB
JavaScript
Executable File
"use strict";
|
|
const path = require("path");
|
|
const webpack = require("webpack");
|
|
const utils = require("./utils");
|
|
const config = require("../config");
|
|
const vueLoaderConfig = require("./vue-loader.conf");
|
|
const multiBuilder = require("./multipage");
|
|
var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
|
|
var vConsolePlugin = require("vconsole-webpack-plugin");
|
|
|
|
const { extraEntry, extraHtmlWebpackPlugins } = multiBuilder;
|
|
|
|
function resolve(dir) {
|
|
return path.join(__dirname, "..", dir);
|
|
}
|
|
|
|
const createLintingRule = () => ({
|
|
test: /\.(js|vue)$/,
|
|
loader: "eslint-loader",
|
|
enforce: "pre",
|
|
include: [resolve("src"), resolve("test")],
|
|
options: {
|
|
formatter: require("eslint-friendly-formatter"),
|
|
emitWarning: !config.dev.showEslintErrorsInOverlay
|
|
}
|
|
});
|
|
|
|
// 替换代理的链接 定义替换内容
|
|
let Defines = {};
|
|
const devServer = {
|
|
proxy: config.dev.proxyTable
|
|
};
|
|
for (let p in devServer.proxy) {
|
|
Defines[devServer.proxy[p].name] = JSON.stringify(p);
|
|
// devServer.proxy[p].name;
|
|
}
|
|
// console.log(process.env.NODE_ENV);
|
|
if (process.env.NODE_ENV === "production") {
|
|
for (let p in devServer.proxy) {
|
|
Defines[devServer.proxy[p].name] = JSON.stringify(
|
|
devServer.proxy[p].target
|
|
);
|
|
// devServer.proxy[p].name;
|
|
}
|
|
}
|
|
|
|
const webpackConfig = {
|
|
context: path.resolve(__dirname, "../"),
|
|
entry: {
|
|
...extraEntry,
|
|
vue: ['vue'],
|
|
|
|
|
|
},
|
|
output: {
|
|
path: config.build.assetsRoot,
|
|
filename: "[name].js"
|
|
// publicPath:
|
|
// process.env.NODE_ENV === "production"
|
|
// ? config.build.assetsPublicPath
|
|
// : config.dev.assetsPublicPath
|
|
},
|
|
resolve: {
|
|
extensions: [".js", ".vue", ".json"],
|
|
alias: {
|
|
vue$: "vue/dist/vue.esm.js",
|
|
"@": resolve("src"),
|
|
mui: resolve("src") + "/assets/mui/"
|
|
}
|
|
},
|
|
module: {
|
|
rules: [
|
|
...(config.dev.useEslint ? [createLintingRule()] : []),
|
|
{
|
|
test: /\.vue$/,
|
|
loader: "vue-loader",
|
|
options: vueLoaderConfig
|
|
},
|
|
{
|
|
test: /\.js$/,
|
|
loader: "babel-loader",
|
|
include: [
|
|
resolve("src"),
|
|
resolve("test"),
|
|
resolve("node_modules/webpack-dev-server/client")
|
|
]
|
|
},
|
|
{
|
|
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
|
loader: "url-loader",
|
|
options: {
|
|
limit: 10000,
|
|
name: utils.assetsPath("img/[name].[ext]")
|
|
}
|
|
},
|
|
{
|
|
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
|
loader: "url-loader",
|
|
options: {
|
|
limit: 10000,
|
|
name: utils.assetsPath("media/[name].[ext]")
|
|
}
|
|
},
|
|
{
|
|
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
|
loader: "url-loader",
|
|
options: {
|
|
limit: 10000,
|
|
name: utils.assetsPath("fonts/[name].[ext]")
|
|
}
|
|
}
|
|
]
|
|
},
|
|
node: {
|
|
// prevent webpack from injecting useless setImmediate polyfill because Vue
|
|
// source contains it (although only uses it if it's native).
|
|
setImmediate: false,
|
|
// prevent webpack from injecting mocks to Node native modules
|
|
// that does not make sense for the client
|
|
dgram: "empty",
|
|
fs: "empty",
|
|
net: "empty",
|
|
tls: "empty",
|
|
child_process: "empty"
|
|
},
|
|
plugins: [...extraHtmlWebpackPlugins, new webpack.DefinePlugin(Defines),
|
|
new vConsolePlugin({
|
|
enable: config.dev.vConsole // 发布代码前记得改回 false
|
|
}),
|
|
new CommonsChunkPlugin({
|
|
name: ["vue"],
|
|
minChunks: 2
|
|
|
|
})]
|
|
};
|
|
|
|
const vuxLoader = require("vux-loader");
|
|
|
|
module.exports = vuxLoader.merge(webpackConfig, {
|
|
plugins: ["vux-ui"]
|
|
});
|