Commit a2dc1009 by fanx

init

0 parents
> 1%
last 2 versions
not dead
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
VUE_APP_NODE_ENV="development"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="development"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="production"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
VUE_APP_NODE_ENV="test"
VUE_APP_VERSION="0.0.1"
VUE_APP_API="http://www.baidu.com"
\ No newline at end of file \ No newline at end of file
module.exports = {
root: true,
env: {
node: true
},
extends: [
'plugin:vue/essential',
'@vue/standard'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'arrow-parens': 0, // allow paren-less arrow functions
'generator-star-spacing': 0, // allow async-await
"no-unused-vars": [1, {
"vars": "local", //允许声明未使用变量
"args": "none" //参数不检查
}],
"semi": [0], //关闭语句强制分号结尾
"no-multiple-empty-lines": [0, { "max": 100 }], //空行最多不能超过100行
"no-mixed-spaces-and-tabs": [0], //关闭禁止混用tab和空格
"comma-dangle": [2, 'never'], //解决最后一行 有一个逗号问题
}
}
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# polysoft-h5
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
### Lints and fixes files
```
yarn lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
['import', {
libraryName: 'vant',
libraryDirectory: 'es',
style: true
}, 'vant']
]
}
{
"name": "polysoft-h5",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "vue-cli-service serve",
"test": "vue-cli-service serve --mode test",
"pro": "vue-cli-service serve --mode pro",
"build:dev": "vue-cli-service build --mode dev",
"build:test": "vue-cli-service build --mode test",
"build:pro": "vue-cli-service build --mode pro",
"lint": "vue-cli-service lint"
},
"dependencies": {
"autoprefixer": "^9.7.6",
"axios": "^0.21.1",
"core-js": "^3.6.5",
"js-cookie": "^2.2.1",
"lib-flexible": "^0.3.2",
"vconsole": "^3.4.1",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0",
"vuex-persist": "^3.1.3"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-standard": "^5.1.2",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.3",
"compression-webpack-plugin": "^3.1.0",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"postcss-pxtorem": "^5.1.1",
"vue-template-compiler": "^2.6.11",
"webpack-spritesmith": "^1.1.0"
}
}
const autoprefixer = require('autoprefixer')
const pxtorem = require('postcss-pxtorem')
module.exports = ({ file }) => {
let rootValue
// console.log(file.dirname)
// vant 37.5 [link](https://github.com/youzan/vant/issues/1181)
// if (file && file.dirname && file.dirname.indexOf('vant') > -1 && file.dirname.indexOf('swiper') > -1) {
if (file && file.dirname && file.dirname.indexOf('vant') > -1) {
rootValue = 37.5
} else {
rootValue = 75
}
return {
plugins: [
autoprefixer(),
pxtorem({
rootValue: rootValue,
propList: ['*'],
selectorBlackList: ['.swiper'], // 要忽略的选择器并保留为px。
minPixelValue: 0
})
]
}
}
\ No newline at end of file \ No newline at end of file
No preview for this file type
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,index-scalable=no,user-scalable=0,viewport-fit=cover" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<router-view/>
</div>
</template>
@import "variable";
*{
padding: 0;
margin: 0;
box-sizing: border-box;
touch-action: auto;
-webkit-overflow-scrolling:touch;
font-family: "苹方黑体-准-简","PingFangSC-Regular","PingFang SC","Microsoft YaHei","微软雅黑", "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Source Han Sans", "Noto Sans CJK Sc", "Microsoft Jhenghei", sans-serif;
}
html, body {
// height:100vh;
//min-height: 100%;
height:100vh;
width: 100vw;
margin: 0;
padding:0;
//font-weight:300;
}
// #__vconsole{
// display:none;
// }
@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
.iPhone{
//头部
.NavBar{padding-top:calc(env(safe-area-inset-top) / 1.5)}
.NavBarWrap{margin-bottom:calc(env(safe-area-inset-top) / 1.5)}
.payment_nav{padding-top:calc(env(safe-area-inset-top) / 1.5)}
.payment_navbar_wrap{padding-top:calc(env(safe-area-inset-top) / 1.5)}
.home{padding-bottom:env(safe-area-inset-top)}
.navigation{padding-top:calc(env(safe-area-inset-top) / 1.5) !important}
.addAddress,.shop_item{padding-top:calc(env(safe-area-inset-top) / 1.5)}
.product_footer{
//bottom:calc(env(safe-area-inset-bottom) + 10px) !important;
padding-bottom:calc(env(safe-area-inset-bottom) / 1.5) !important;
padding-top:15px !important;
}
.header{padding-top:calc(env(safe-area-inset-top) / 1.5) !important}
}
}
::-webkit-scrollbar{ // 直接复制黏贴到样式页.css,完美解决
display: none;
/* background-color:transparent; */
}
.pay {
height: 100vh; width: 100vw;
}
#app{
height:100vh;
}
h1,h2,h3,h4,h5,h6{ font-weight: normal;}
html{
-webkit-tap-highlight-color: transparent;
}
//iconfont start
.icon {
width: 1.2em;
height: 1.2em;
fill: currentColor;
overflow: hidden;
}
//iconfont end
//vant 相关
.van-tabs__wrap--scrollable .van-tab {flex:1}
.van-tabs__line{
background-color: @theme;
bottom:10px;
}
.van-button--default{
background-color: @headerBg;
color: #fff;
}
.van-tab--active{
color:@theme;
}
.van-tabs--line .van-tabs__wrap{
//height: 50px;
}
//vant 相关 end
.titlePaddingTop{
padding-top: 88px;
}
.left-enter, .left-leave-to {
transform: translate3d(-100%, 0, 0)
}
.left-leave, .left-enter-to {
transform: translate3d(0, 0, 0)
}
.left-enter-active, .left-leave-active {
transition: all .2s
}
// vant Dialog 按钮背景色 和 字体颜色
.van-dialog__cancel{
background: #fff;
color: #545454;
}
.van-dialog__confirm{
background: #fff;
color: #5594E5;
}
//vant nav
.van-tabs__nav--line{
padding-bottom:5px;
box-sizing: border-box;
}
// 清除浮动
.clearfix {
*zoom: 1;
&:before,
&:after {
display: block;
content: "";
line-height: 0;
}
&:after {
clear: both;
}
}
.van-list__finished-text {
position: relative;
&::before {
content: "";
background-color: #999;
height: 4px;
transform: scale(1,0.3);
width: 100px;
position: absolute;
top: 50%;
margin-top:-3px;
left: 120px;
}
&::after {
content: "";
background-color: #999;
height: 4px;
transform: scale(1,0.3);
width: 100px;
position: absolute;
top: 50%;
margin-top:-3px;
right: 120px;
}
}
.noList{
.van-list__finished-text{
visibility: hidden !important;
}
}
// 预览大图页签
.van-image-preview__index {
top: 93%;
}
// picc底部样式
.van-list__finished-text::before {
left: 2.1rem;
}
.van-list__finished-text::after {
right: 2.1rem;
}
\ No newline at end of file \ No newline at end of file
@import 'variable.less';
@import 'mixins.less';
@import 'common.less';
\ No newline at end of file \ No newline at end of file
.round-borders (@radius) {
border-radius : @radius;
-moz-border-radius : @radius;
-webkit-border-radius: @radius;
}
.justify-align-center() {
display : flex;
justify-content: center;
align-items : center;
}
.justify-align-between(){
display : flex;
align-items : center;
justify-content: space-between;
}
.justify-between{
display : flex;
justify-content: space-between;
}
.justify-center() {
display : flex;
justify-content: center;
}
.align-center() {
display : flex;
align-items: center;
}
.ellipsis() {
overflow : hidden;
text-overflow: ellipsis;
white-space : nowrap;
}
// 字重
.fw550 {
font-weight: 550;
}
// flex 水平、垂直都居中,默认主轴方向为水平方向
.flex-center(@direction: row) when (@direction =row),
(@direction =h) {
.justify-align-center();
flex-direction: row;
}
// flex 水平、垂直都居中
.flex-center(@direction: row) when(@direction =column),
(@direction =v) {
.justify-align-center();
flex-direction: column;
}
// flex水平居中主轴为水平方向
.flex-center-h(@direction: row) when (@direction =row),
(@direction =h) {
.justify-center();
flex-direction: row;
}
// flex水平居中主轴为垂直方向
.flex-center-h(@direction: row) when (@direction =column),
(@direction =v) {
.align-center();
flex-direction: column;
}
// flex垂直居中主轴为水平方向
.flex-center-v(@direction: row) when (@direction =row),
(@direction =h) {
.align-center();
flex-direction: row;
}
// flex垂直居中主轴为垂直方向
.flex-center-v(@direction: row) when (@direction =column),
(@direction =v) {
.justify-center();
flex-direction: column;
}
// 固定显示多上行,size:固定显示的行数
.line-clamp(@size) {
overflow : hidden;
text-overflow : ellipsis;
line-clamp : @size;
-webkit-line-clamp: @size;
display : -webkit-box;
-webkit-box-orient: vertical;
}
// 旋转角度
.transform-rotate(@deg) {
transform : rotate(@deg);
-ms-transform : rotate(@deg);
-moz-transform : rotate(@deg);
-webkit-transform: rotate(@deg);
-o-transform : rotate(@deg);
}
\ No newline at end of file \ No newline at end of file
.icon-sprite { display: inline-block; background-image: url(../images/sprite.png); background-size: 200px 200px; }
.icon-logo { width: 200px; height: 200px; background-position: 0px 0px; }
\ No newline at end of file \ No newline at end of file
// 字体 全局变量
@font47 : 47px;
@font30 : 30px;
@font27 : 27px;
@font24 : 24px;
@font22 : 22px;
@font20 : 20px;
@font18 : 18px;
@font16 : 16px;
@font14 : 14px;
@font12 : 12px;
@font10 : 10px;
// radius-size
@radius-size-medium : 5px;
@radius-size-medium10 : 10px;
@radius-size-medium20 : 20px;
@radius-size-medium30 : 30px;
@warn:red;
//页面背景颜色
@bgColor:#f8f8f8;
@headerBg:#292F42;
//当前主题颜色
@theme:#729ae0;
// 页面颜色
@color000: #000;
@colorfff: #fff;
@color333: #333;
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
import Vue from 'vue'
import Vconsole from 'vconsole'
import 'lib-flexible/flexible' // 根据窗口不同,给html设置不同的font-size值
import App from './App.vue'
import router from './router'
import store from './store'
import '@/assets/css/index.less'
const APP_ENV = process.env.VUE_APP_NODE_ENV
Vue.config.productionTip = false
if (process.env.APP_ENV != 'production') {
const vConsole = new Vconsole()
Vue.use(vConsole)
}
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/home/index.vue'
import userRouter from './modules/user'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
].concat(userRouter)
const router = new VueRouter({
routes
})
export default router
const userRouter = [
{
path: '/login',
name: 'Login',
component: () => import(/* webpackChunkName: "login" */ '@/views/user/login.vue') // 登录
},
{
path: '/register',
name: 'Register',
component: () => import(/* webpackChunkName: "register" */ '@/views/user/register.vue') // 注册
}
]
export default userRouter
\ No newline at end of file \ No newline at end of file
import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
import createLogger from 'vuex/dist/logger'
import home from './modules/home'
// vuex 数据存储 进行本地存储操作
const vuexLocal = new VuexPersistence({
storage: window.localStorage,
modules: ["home"]
})
Vue.use(Vuex)
const store= new Vuex.Store({
strict: process.env.NODE_ENV !== 'production',
modules: {
home
},
plugins: [vuexLocal.plugin, createLogger()]
})
export default store
export default {
namespaced: true,
state: {
},
mutations: {
},
actions: {
},
modules: {
}
}
import Cookies from 'js-cookie'
const TokenKey = 'NAFM_TOKEN'
export function getToken() {
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
\ No newline at end of file \ No newline at end of file
import Vue from 'vue';
import Request from './Request'
const Axios = new Request()
Plugin.install = (Vue) => {
Vue.prototype.$http = Axios
}
Object.assign(window, {
$http: Axios
})
Vue.use(Plugin)
export default Axios
\ No newline at end of file \ No newline at end of file
import axios from 'axios'
const APP_ENV = process.env.VUE_APP_NODE_ENV
const APP_API = process.env.VUE_APP_API
const codeMessage = {
200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
202: '一个请求已经进入后台排队(异步任务)。',
204: '删除数据成功。',
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
401: '用户没有权限(令牌、用户名、密码错误)。',
403: '用户得到授权,但是访问是被禁止的。',
404: '发出的请求是不存在的,服务器没有进行操作。',
406: '请求的格式不可得。',
410: '请求的资源被永久删除。',
422: '当创建一个对象时,发生一个验证错误。',
500: '服务器发生错误,请检查服务器。',
502: '网关错误。',
503: '服务不可用,服务器暂时过载或维护。',
504: '网关超时。'
}
const instance = axios.create({
baseURL: APP_ENV === 'development' ? '/api' : APP_API
})
class Request {
constructor(baseURL) {
this.baseURL = baseURL
}
// 检查返回状态
checkStatus(response) {
console.log(2)
const responseData = response.data
const errorText = response && (codeMessage[response.status] || response.statusText)
if (response && (response.stutus === 200 || response.stutus === 304 || response.status === 400)) {
if (responseData.stutus == 0) {
return responseData
}
if (responseData.status === 401 || responseData.status === 402) {
return Promise.reject(errorText)
}
return Promise.reject(responseData)
}
Promise.reject(response)
}
// 拦截器
interceptors(instance, scope) {
// 请求拦截器
instance.interceptors.request.use(config => {
config.url = baseURL
config.scope = scope
return config
}, error => {
return Promise.reject(error)
})
// 相应拦截器
instance.interceptors.response.use(res => {
return res
}, error => {
const { response, message } = error || {}
if (message && message.includes('timeout')) {
return Promise.reject({ statusText: '网络超时,请重新尝试!' })
}
let errorInfo = response
if (!errorInfo) {
try {
const { request: { status, statusText }, config } = JSON.parse(JSON.stringify(error))
errorInfo = {
status,
statusText,
request: { responseURL: config.url }
}
} catch (e) {
errorInfo = error
}
}
return Promise.reject(errorInfo)
})
}
// 设置请求
setRequest(method, url, data, scope, file = false) {
this.interceptors(instance, scope)
const options = { method, url }
let contentType = ''
if (file) {
contentType = 'multipart/form-data'
} else if (method == 'post') {
contentType = 'application/json'
} else {
contentType = 'application/x-www-form-urlencoded; charset=UTF-8'
}
const headers = {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': contentType
}
Object.assign(options, {
headers,
[method == 'post' ? 'data' : 'params']: data
})
return instance(options).then(this.checkStatus).catch(this.error)
}
// get
get(url, data, scope) {
return this.setRequest('get', url, data, scope)
}
// post
post(url, data, scope) {
console.log(1,url)
return this.setRequest('post', url, data, scope)
}
// GET
GET(url, data, scope) {
return this.setRequest('get', url, data, scope).then(this.success)
}
// POST
POST(url, data, scope) {
return this.setRequest('post', url, data, scope).them(this.success)
}
// 错误
error(e) {
return Promise.reject(e)
}
// 成功
success(da) {
return da.data
}
// 文件成功
fileSuccess(data) {
return data
}
}
export default Request;
\ No newline at end of file \ No newline at end of file
/**
* 工具类
* import utils from "@/utils";
*/
/**
* table滚动
*/
const tableScroll = (columns, y) => {
let _y = (typeof y == "string" || typeof y == 'number') ? y : document.body.clientHeight - y.getBoundingClientRect().top - 150;
let opt = {
x: (typeof columns == "string" || typeof columns == 'number') ? columns : columns.reduce((c, n) => {
let cn = typeof c == "number" ? c : parseInt(c['width'] || 300);
let nn = parseInt(n['width'] || 300);
return cn + nn;
}),
y: Math.max(_y, 300)
}
// console.log(opt);
return opt
}
// table 表格各项配置
const tableConfig = {
align: 'center', // 表格内容排列方式
ellipsis: true, // 表格内容超出宽度,省略显示
}
// 封装接口返回数据
const handlePromise = (promise) => {
return promise.then(res => {
return Promise.resolve(res)
}).catch(e => {
return Promise.resolve(res)
})
}
export {
tableScroll,
tableConfig,
handlePromise
}
\ No newline at end of file \ No newline at end of file
import Vue from 'vue'
import { Loading, Lazyload, Tab, Tabs, Toast, Dialog, Icon, Field } from 'vant'
// 默认vant组件
[Loading, Lazyload, Tab, Tabs, Toast, Dialog, Icon, Field].forEach(item => Vue.use(item))
// 先预制,后期做统一调整
Object.assign(window, {
Toast, Dialog
})
<template>
<div>
home
</div>
</template>
<script>
export default {
name: 'Home',
components: {
},
data() {
return {}
},
methods: {
}
}
</script>
\ No newline at end of file \ No newline at end of file
<template>
<div class="login-container">
Login
</div>
</template>
<script>
export default {
name: 'Login',
components: {
},
data() {
return {}
},
methods: {
}
}
</script>
<style lang="less" scoped>
.login-container {
width: 100%;
height: 100%;
font-size: 40px;
}
</style>
\ No newline at end of file \ No newline at end of file
<template>
<div>
Register
</div>
</template>
<script>
export default {
name: 'Register',
components: {},
data() {
return {}
},
methods: {}
}
</script>
\ No newline at end of file \ No newline at end of file
const path = require('path')
const CompressionPlugin = require('compression-webpack-plugin')
const SpritesmithPlugin = require('webpack-spritesmith') // 雪碧图
const environment = process.env.VUE_APP_NODE_ENV // 定义变量 环境
const app_version = process.env.VUE_APP_VERSION // 定义变量 版本号
// cdn
const cdn = {
// 开发环境
dev: {
css: [],
js: []
},
// 生产环境
build: {
css: [],
js: [
// `https://lib.baomitu.com/vue/2.6.11/vue.min.js`,
// `https://lib.baomitu.com/vue-router/3.1.3/vue-router.min.js`,
// `https://lib.baomitu.com/vuex/3.1.2/vuex.min.js`
]
}
}
// 雪碧图的自定义模板
const templateFunction = function (data) {
var shared = '.icon-sprite { display: inline-block; background-image: url(I); background-size: Dpx Hpx; }'
.replace('I', data.sprites[0].image)
.replace('D', data.sprites[0].total_width)
.replace('H', data.sprites[0].total_height)
var perSprite = data.sprites.map(function (sprite) {
return '.icon-N { width: Wpx; height: Hpx; background-position: Xpx Ypx; }'
.replace('N', sprite.name.replace(/_/g, '-'))
.replace('W', sprite.width)
.replace('H', sprite.height)
.replace('X', sprite.offset_x)
.replace('Y', sprite.offset_y)
}).join('\n')
return shared + '\n' + perSprite
}
module.exports = {
outputDir: "dist",
assetsDir: "assets",
publicPath: "./",
devServer: {
host: '0.0.0.0',
port: "8080",
https: false,
hotOnly: false,
overlay: {
warning: false,
errors: false
},
proxy: {
'/api': {
// 测试环境
target: process.env.VUE_APP_API, // http://192.168.0.114:8000/
changeOrigin: true, // 是否跨域
pathRewrite: {
'^/api': '' // 需要rewrite重写的, //
}
}
},
},
pages: {
index: {
entry: "./src/main.js",
template: path.join(__dirname, "public/index.html"),
filename: 'index.html',
title: 'NAFMII-H5',
chunks: ['chunk-vendors', 'chunk-common', 'index'],
// cdn: environment === 'development' ? cdn.dev : cdn.build
}
},
productionSourceMap: false,
css: {
loaderOptions: {
less: {
javascriptEnabled: true
},
}
},
configureWebpack: config => {
if (environment === "devproduction" || environment === 'test' || environment === "uat" || environment === "pro") {
//开发环境开启压缩
config.plugins.push(new CompressionPlugin({ // Gzip压缩配置
test: /\.js$|\.html$|\.less/, // 匹配文件名
threshold: 0,
deleteOriginalAssets: false // 是否删除原文件
}))
}
return {
externals: {
//moment: "moment",
//axios: "axios"
},
resolve: {
modules: ["node_modules", "spritesmith-generated"],
alias: {
// 别名
'@': path.resolve('src'),
}
},
plugins: [
new SpritesmithPlugin({
src: {
cwd: path.resolve(__dirname, './src/assets/icon'),
glob: '*.png'
},
target: { // 输出雪碧图文件及样式文件,这个是打包后,自动生成的雪碧图和样式
image: path.resolve(__dirname, './src/assets/images/sprite.png'),
css: [
[path.resolve(__dirname, './src/assets/css/sprite.less'), {
// 引用自己的模板
format: 'function_based_template'
}]
]
},
customTemplates: { // 自定义模板入口
function_based_template: templateFunction
},
apiOptions: { // 样式文件中调用雪碧图地址写法
cssImageRef: '../images/sprite.png'
},
spritesmithOptions: { // 让合成的每个图片有一定的距离
padding: 20
}
})
]
}
},
chainWebpack: config => {
const hashName = `assets/js/[name].[hash:8].${environment}.${app_version}.js`
config.output.filename(hashName).end()
config.output.chunkFilename(hashName).end()
},
lintOnSave: false
}
\ No newline at end of file \ No newline at end of file
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!