Commit adc72081 authored by SQL_Mou's avatar SQL_Mou

donkey Frame up

parent 02d96e8d
## 配置测试和本地开发时的 接口地址
VUE_APP_URL = "http://127.0.0.1"
\ No newline at end of file
## 配置 正式接口地址
VUE_APP_URL = "http://192.168.0.108"
\ No newline at end of file
......@@ -2230,6 +2230,14 @@
"integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
"dev": true
},
"async-validator": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"requires": {
"babel-runtime": "6.x"
}
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz",
......@@ -2269,6 +2277,19 @@
"integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
"dev": true
},
"axios": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"requires": {
"follow-redirects": "^1.10.0"
}
},
"babel-helper-vue-jsx-merge-props": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
"integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
},
"babel-loader": {
"version": "8.2.2",
"resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz",
......@@ -2320,6 +2341,27 @@
"@babel/helper-define-polyfill-provider": "^0.2.2"
}
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
},
"dependencies": {
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
}
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714298273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz",
......@@ -2772,7 +2814,6 @@
"version": "1.0.2",
"resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
"integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
......@@ -3951,8 +3992,7 @@
"deepmerge": {
"version": "1.5.2",
"resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
"integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
"dev": true
"integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
},
"default-gateway": {
"version": "5.0.5",
......@@ -4392,6 +4432,19 @@
"integrity": "sha1-QY+tgMMnakYQPKcqIagpBiDYPEo=",
"dev": true
},
"element-ui": {
"version": "2.15.5",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.5.tgz",
"integrity": "sha512-B/YCdz2aRY2WnFXzbTRTHPKZHBD/2KV6u88EBnkaARC/Lyxnap+7vpvrcW5UNTyVwjItS5Fj1eQyRy6236lbXg==",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
"deepmerge": "^1.2.0",
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.0",
"throttle-debounce": "^1.0.1"
}
},
"elliptic": {
"version": "6.5.4",
"resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290896983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz",
......@@ -5040,8 +5093,7 @@
"follow-redirects": {
"version": "1.14.2",
"resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.2.tgz?cache=0&sync_timestamp=1629288519293&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.2.tgz",
"integrity": "sha1-zsuCUEfAD15msUL5D+1PUV3seJs=",
"dev": true
"integrity": "sha1-zsuCUEfAD15msUL5D+1PUV3seJs="
},
"for-in": {
"version": "1.0.2",
......@@ -5136,8 +5188,7 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz",
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
"dev": true
"integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
},
"gensync": {
"version": "1.0.0-beta.2",
......@@ -5155,7 +5206,6 @@
"version": "1.1.1",
"resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
"integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
......@@ -5293,7 +5343,6 @@
"version": "1.0.3",
"resolved": "https://registry.nlark.com/has/download/has-1.0.3.tgz",
"integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
......@@ -5313,8 +5362,7 @@
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz",
"integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
"dev": true
"integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
},
"has-tostringtag": {
"version": "1.0.0",
......@@ -7045,6 +7093,11 @@
"integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
"dev": true
},
"normalize-wheel": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz",
......@@ -7115,8 +7168,7 @@
"object-inspect": {
"version": "1.11.0",
"resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.11.0.tgz",
"integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE=",
"dev": true
"integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE="
},
"object-is": {
"version": "1.1.5",
......@@ -8296,10 +8348,12 @@
"dev": true
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
"integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
"dev": true
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
"integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
"requires": {
"side-channel": "^1.0.4"
}
},
"query-string": {
"version": "4.3.4",
......@@ -8625,6 +8679,14 @@
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
}
}
},
"require-directory": {
......@@ -8645,6 +8707,11 @@
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz",
......@@ -9033,7 +9100,6 @@
"version": "1.0.4",
"resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz",
"integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
......@@ -9795,6 +9861,11 @@
"neo-async": "^2.6.0"
}
},
"throttle-debounce": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
"integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
......
......@@ -7,7 +7,10 @@
"build": "vue-cli-service build"
},
"dependencies": {
"axios": "^0.21.1",
"core-js": "^3.6.5",
"element-ui": "^2.15.5",
"qs": "^6.10.1",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
......
//-----------------登录--------------------
export const login = 'xxxx/login'; //登录
\ No newline at end of file
import axios from 'axios'
import { config as appConfig } from '../config.js'
import { Message } from 'element-ui'
import bus from "@/axios/bus.js";
// axios 配置
axios.defaults.baseURL = appConfig.BASE_URL;
axios.defaults.timeout = 500000;
axios.defaults.headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
}
// http request 请求拦截器,有token值则配置上token值
axios.interceptors.request.use(
config => {
var token = localStorage.getItem(appConfig.TOKEN_KEY);
if (localStorage.getItem(appConfig.USER_KEY)) {
let ticket = JSON.parse(localStorage.getItem(appConfig.USER_KEY)).ticket;
config.headers.ticket = ticket == null ? '' : ticket;
}
config.headers.token = token == null ? '' : token;
return config;
},
err => {
return Promise.reject(err);
}
);
// http response 服务器响应拦截器,这里拦截401错误,并重新跳入登页重新获取token
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response) {
console.log(error.response.status)
switch (error.response.status) {
case 403:
Message({
message: "登录凭证失效,请重新登录",
type: 'warning'
});
window.location.href = '#/login';
error.message = "登录凭证失效,请重新登录";
bus.$emit("todoDetailWebsocket");
break
case 401:
Message({
message: '未授权,请重新登录',
type: 'warning'
});
error.message = '未授权,请重新登录';
break
// localStorage.removeItem(appConfig.TOKEN_KEY)
// localStorage.removeItem(appConfig.USER_KEY)
// router.replace({
// path: '/login',
// // query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
// })
case 400:
error.message = '错误请求'
case 404:
error.message = '请求错误,未找到该资源'
break
case 405:
error.message = '请求方法未允许'
break
case 408:
error.message = '请求超时'
break
case 500:
Message({
message: '内部服务器错误,请联系管理员',
type: 'warning'
});
break
case 501:
error.message = '网络未实现'
break
case 502:
error.message = '网络错误'
break
case 503:
error.message = '服务不可用'
break
case 504:
error.message = '网络超时'
break
case 505:
error.message = 'http版本不支持该请求'
break
default:
error.message = `连接错误${error.response.status}`
// router.replace({
// path: '/',
// query: {redirect: router.currentRoute.fullPath}//登录成功后跳入浏览的当前页面
// })
}
// console.log(error.response);
} else {
Message({
message: "请求资源失败,请联系管理员",
type: 'warning'
});
}
return Promise.reject(error)
}
);
export default axios;
import Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;
\ No newline at end of file
import axios from '../axios/axiosConfig';
import { config as appConfig } from '../config.js';
import * as api from '../axios/api.js';
import qs from 'qs';
if (!appConfig.BASE_URL) {
appConfig.BASE_URL = appConfig.REAL_URL;
} else if (!appConfig.REAL_URL) {
appConfig.REAL_URL = appConfig.BASE_URL;
}
//获取url
function getUrl(url) {
let urlPre = url.split('?')[0];
let flag = false;
$.each(api, (key, val) => {
if (urlPre == val) {
$.each(whiteList, (_, wl) => {
if (wl.key == key && wl.isMock) {
flag = true;
return false;
}
});
}
});
if (!flag) {
url = appConfig.REAL_URL + url;
}
// console.log(url);
return url;
}
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/
export function httpGet(url, params = {}) {
url = getUrl(url);
// log(url);
return new Promise((resolve, reject) => {
//这几个几url始终使用mokc数据
if (url.indexOf('alarm/bigScreen/alertComponent') > -1) {
resolve(alertComponen());
} else if (url.indexOf('alarm/bigScreen/securityComponent') > -1) {
resolve(securityComponent());
} else {
axios
.get(url, {
params: params
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
}
});
}
/**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/
export function httpPost(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
// console.log(url);
axios.post(url, qs.stringify(data)).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装patch请求
* @param url
* @param data
* @returns {Promise}
*/
export function patch(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.patch(url, data).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装put请求
* @param url
* @param data
* @returns {Promise}
*/
export function put(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.put(url, qs.stringify(data)).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装put请求 参数放在body
* @param url
* @param data
* @returns {Promise}
*/
export function putForJson(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'put',
url: url,
data: data,
headers: { 'Content-Type': 'application/json;charset=UTF-8' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
/**
* 封装del请求
* @param url
* @param data
* @returns {Promise}
*/
export function httpDel(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios.delete(url, { params: data }).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
export function httpPostForJson(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: data,
headers: { 'Content-Type': 'application/json;charset=UTF-8' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
export function httpGetFile(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'get',
url: url,
params: params,
responseType: 'blob'
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
export function httpGetExport(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios
.get(url, {
params: params,
responseType: 'arraybuffer'
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
});
}
export function httpPostExport(url, params = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios
.post(url, {
params: qs.stringify(params),
responseType: 'arraybuffer'
})
.then(response => {
resolve(response.data);
})
.catch(err => {
reject(err);
});
});
}
export function fileDownload(data, fileName) {
let blob = new Blob([data], {
type: 'application/octet-stream;charset=utf-8'
});
let filename = fileName || 'filename';
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, filename);
} else {
var blobURL = window.URL.createObjectURL(blob);
var tempLink = document.createElement('a');
tempLink.style.display = 'none';
tempLink.href = blobURL;
tempLink.setAttribute('download', filename);
if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank');
}
document.body.appendChild(tempLink);
tempLink.click();
document.body.removeChild(tempLink);
window.URL.revokeObjectURL(blobURL);
}
}
export function httpUpload(url, data = {}) {
url = getUrl(url);
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: data,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(
response => {
resolve(response.data);
},
err => {
reject(err);
}
);
});
}
// // 下载方法
// export function fileDownload (data, fileName) {
// let blob = new Blob([data], {
// type: "application/octet-stream"
// });
// let filename = fileName || "filename";
// if (typeof window.navigator.msSaveBlob !== "undefined") {
// window.navigator.msSaveBlob(blob, filename);
// } else {
// var blobURL = window.URL.createObjectURL(blob);
// var tempLink = document.createElement("a");
// tempLink.style.display = "none";
// tempLink.href = blobURL;
// tempLink.setAttribute("download", filename);
// if (typeof tempLink.download === "undefined") {
// tempLink.setAttribute("target", "_blank");
// }
// document.body.appendChild(tempLink);
// tempLink.click();
// document.body.removeChild(tempLink);
// window.URL.revokeObjectURL(blobURL);
// }
// }
// 项目配置相关
const config = {
BASE_URL: 'http://localhost:30003/hlkj/', //mokc地址
REAL_URL: 'http://localhost:30003/hlkj/', //mokc地址
TOKEN_KEY: 'token',
USER_KEY: 'userInfo',
URL_KEY: 'urlInfo'
};
exports.config = config;
const path = require("path");
function resolve(dir) {
return path.join(__dirname,dir);
}
module.exports = {
// 部署应用时的基本 URL
// publicPath: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_URL : process.env.VUE_APP_URL,
// build时构建文件的目录 构建时传入 --no-clean 可关闭该行为
outputDir: 'dist',
// build时放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
assetsDir: '',
// 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
indexPath: 'index.html',
// 默认在生成的静态资源文件名中包含hash以控制缓存
filenameHashing: true,
// 构建多页面应用,页面的配置
pages: {
index: {
// page 的入口
entry: 'src/main.js',
// 模板来源
template: 'public/index.html',
// 在 dist/index.html 的输出
filename: 'index.html',
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Index Page',
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
},
// 当使用只有入口的字符串格式时,
// 模板会被推导为 `public/subpage.html`
// 并且如果找不到的话,就回退到 `public/index.html`。
// 输出文件名会被推导为 `subpage.html`。
},
// 是否使用包含运行时编译器的 Vue 构建版本
runtimeCompiler: false,
// Babel 显式转译列表
transpileDependencies: [],
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建
productionSourceMap: true,
// 设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性(注:仅影响构建时注入的标签)
crossorigin: '',
// 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)
integrity: false,
// 如果这个值是一个对象,则会通过 webpack-merge 合并到最终的配置中
// 如果你需要基于环境有条件地配置行为,或者想要直接修改配置,那就换成一个函数 (该函数会在环境变量被设置之后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,你可以直接修改配置,或者返回一个将会被合并的对象
configureWebpack: {},
// 对内部的 webpack 配置(比如修改、增加Loader选项)(链式操作)
chainWebpack: () =>{
},
// css的处理
css: {
// 当为true时,css文件名可省略 module 默认为 false
modules: true,
// 是否将组件中的 CSS 提取至一个独立的 CSS 文件中,当作为一个库构建时,你也可以将其设置为 false 免得用户自己导入 CSS
// 默认生产环境下是 true,开发环境下是 false
extract: false,
// 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能
sourceMap: false,
//向 CSS 相关的 loader 传递选项(支持 css-loader postcss-loader sass-loader less-loader stylus-loader)
loaderOptions: {
css: {},
less: {}
}
},
// 所有 webpack-dev-server 的选项都支持
devServer: {
proxy: {
'/api': {
target: process.env.VUE_APP_URL,
changeOrigin: true,
pathRewrite: {
'^/api' : ''
}
}
}
},
// 是否为 Babel 或 TypeScript 使用 thread-loader
parallel: require('os').cpus().length > 1,
// 向 PWA 插件传递选项
pwa: {},
// 可以用来传递任何第三方插件选项
pluginOptions: {}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment