"use strict"; const path = require("path"); const utils = require("./utils"); const config = require("../config"); const vueLoaderConfig = require("./vue-loader.conf"); const pathSrc = path.resolve(__dirname, "../src"); 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 babelLoader = { include: [ resolve("src"), resolve("test"), resolve("node_modules/webpack-dev-server/client"), resolve("node_modules/vue-element-bigdata-table"), resolve("node_modules/element-ui/src"), resolve("node_modules/icore-sdk") ], exclude: [ resolve("node_modules/element-ui/src/utils/date.js"), resolve("node_modules/element-ui/src/utils/popper.js") ] // sb element-ui竟然在源码里面单独把这两个js转译成了es5 气死哥了!! }; if (pathSrc.indexOf("node_modules") > -1) { babelLoader = { include: [ resolve("src"), resolve("test"), resolve("../../src"), resolve("../../test"), resolve("../webpack-dev-server/client"), resolve("../vue-element-bigdata-table"), resolve("../element-ui/src"), resolve("../icore-sdk") ], exclude: [ resolve("../element-ui/src/utils/date.js"), resolve("../element-ui/src/utils/popper.js") ] // sb element-ui竟然在源码里面单独把这两个js转译成了es5 气死哥了!! }; } module.exports = { context: path.resolve(__dirname, "../"), // entry: { // app: './src/main.js' // }, entry: utils.entries(), 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"), "~": resolve("../../src") } }, module: { rules: [ ...(config.dev.useEslint ? [createLintingRule()] : []), { test: /\.vue$/, loader: "vue-loader", options: vueLoaderConfig }, { test: /\.js$/, loader: "babel-loader", exclude: babelLoader.exclude, include: babelLoader.include }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: "url-loader", options: { limit: 10000, name: utils.assetsPath("img/[name].[hash].[ext]") } }, { test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, loader: "url-loader", options: { limit: 10000, name: utils.assetsPath("media/[name].[hash].[ext]") } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: "url-loader", options: { limit: 10000, name: utils.assetsPath("fonts/[name].[hash].[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" } };