babel篇

在package.json中添加--exec babel-node

如果需要编译es6,我们需要设置presets包含es2015,也就是预先加载es6编译的模块。

如果需要编译es7,我们需要设置presets包含stage-0,也就是预先加载es7编译的模块。

npm install babel-cli -g
npm install babel-core -g
npm i babel-preset-es2015
npm i babel-preset-stage-0

然后在.babelrc文件中加上,stage-0可以缺省

"presets": ["es2015","stage-0"]

公共样式(less)篇

npm i less
npm i less-loader
npm i @nuxtjs/style-resources --save

在nuxt.config.js中修改配置文件

modules: [
'@nuxtjs/style-resources'
],
build: {
styleResources: {
less: [
'assets/less/_theme.less',
'assets/less/_mixins.less'
]
}
}

axios篇

使用nuxt提供的axios插件,没有安装的时候安装下npm install @nuxtjs/axios

在nuxt.config.js中进行配置

plugins: [
'@/plugins/axios',
  {src: '@/plugins/common.js', ssr: false}
],
modules: [
'@nuxtjs/axios',
]

创建 plugins/axios.js 并定义axios的拦截器,定义请求的各个阶段需要进行的处理

export default function({ $axios, redirect }) {
// request interceptor
$axios.interceptors.request.use(
config => {
// do something before request is sent
return config
},
error => {
// do something with request error
return Promise.reject(error)
}
)
$axios.onRequest(config => {
console.log('Making request to ' + config.url)
}) // response interceptor
$axios.interceptors.response.use(
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
response => {
const res = response.data
if (res.code === 20000) {
return res
} else {
redirect('/404')
// if the custom code is not 200, it is judged as an error.
}
return Promise.reject(new Error(res.msg || 'Error'))
},
error => {
console.log('err' + error) // for debug return Promise.reject(error)
}
) $axios.onError(error => {
const code = parseInt(error.response && error.response.status)
if (code === 400) {
redirect('/404')
} else if (code === 500) {
redirect('/500')
}
})
}

创建 libs/request.js 并封装get,post等请求方法

import axios from 'axios'
import { Modal, Message } from 'iview' /**
* 封装get方法
* @param url
* @param params
* @returns {Promise}
*/ export function get (url, params = {}) {
params.t = new Date().getTime()
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
})
.then(response => {
resolve(response.data)
})
.catch(err => {
reject(err)
})
})
} /**
* 封装post请求
* @param url
* @param data
* @returns {Promise}
*/ export function post (url, data = {}) {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch(err => {
reject(err)
})
})
} /**
* 封装delete方法
* @param url
* @param params
* @param confirm 是否有确认弹框
* @returns {Promise}
*/ export function doDelete (url, params = {}, confirm = true) {
return new Promise((resolve, reject) => {
if (confirm) {
Modal.confirm({
title: '提示',
content: '<p>此操作将删除所选数据, 是否继续?</p>',
onOk: () => {
axios.delete(url, {
params: params
})
.then(response => {
resolve(response.data)
})
.catch(err => {
reject(err)
})
},
onCancel: () => {
Message.info('已取消删除')
}
})
} else {
axios.delete(url, {
params: params
})
.then(response => {
resolve(response.data)
})
.catch(err => {
reject(err)
})
}
})
} /**
* 封装deleteOne方法
* @param url
* @param id
* @param confirm 是否有确认弹框
* @returns {Promise}
*/ export function deleteOne (url, id, confirm = true) {
return new Promise((resolve, reject) => {
let newUrl
let data = null
if (typeof id === 'object') {
newUrl = url
data = id
} else if (typeof id === 'string' || typeof id === 'number') {
newUrl = url + '/' + id
}
if (confirm) {
Modal.confirm({
title: '提示',
content: '<p>此操作将永久删除该条数据, 是否继续?</p>',
onOk: () => {
axios.delete(newUrl, {data: data})
.then(response => {
resolve(response.data)
})
.catch(err => {
reject(err)
})
},
onCancel: () => {
Message.info('已取消删除')
}
})
} else {
axios.delete(newUrl, {data: data})
.then(response => {
resolve(response.data)
})
.catch(err => {
reject(err)
})
}
})
} /**
* 封装patch请求
* @param url
* @param data
* @returns {Promise}
*/ export function patch (url, data = {}) {
return new Promise((resolve, reject) => {
axios.patch(url, data)
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch(err => {
reject(err)
})
})
} /**
* 封装put请求
* @param url
* @param data
* @returns {Promise}
*/ export function put (url, data = {}) {
return new Promise((resolve, reject) => {
axios.put(url, data)
.then(response => {
resolve(response.data)
}, err => {
reject(err)
})
.catch(err => {
reject(err)
})
})
}

创建 plugins/common.js 并定义全局变量,接下来就可以用this.$get,this.$post访问了

import Vue from 'vue'
import {post, get, doDelete, deleteOne, put} from '@/libs/request'
let commonConfig = {
install (Vue) {
// 定义全局变量
Vue.prototype.$post = post
Vue.prototype.$get = get
Vue.prototype.$delete = doDelete
Vue.prototype.$deleteOne = deleteOne
Vue.prototype.$put = put
Vue.prototype.$Bus = new Vue()
}
}
Vue.use(commonConfig)

参考链接:https://www.cnblogs.com/goloving/p/11374165.html

iview主题配置篇

创建 plugins/iview-ui.less,其中添加需要修改的主题

@import '~iview/src/styles/index.less';

@primary-color: #333;

@table-thead-bg: #fff;
@table-td-hover-bg: #F7F7FA;
@table-td-highlight-bg: #F7F7FA; @btn-border-radius: 2px; @border-radius-base: 2px; @date-picker-cell-hover-bg: #F7F7FA;

创建 plugins/iview.js中引入主题

import Vue from 'vue'
import iView from 'iview'
import './iview-ui.less'

在nuxt.config.js的build中配置并允许在less中编写js文件


plugins: [
  '@/plugins/iview'
],
build: {
  loaders: {
    less: {
      javascriptEnabled: true
    }
   }
}

eslint配置篇

npm install --save-dev babel-eslint eslint eslint-config-standard eslint-plugin-html eslint-plugin-promise eslint-plugin-standard eslint-plugin-import eslint-plugin-node
npm install eslint-plugin-vue --save-dev
npm install eslint-plugin-prettier --save-dev
npm install @nuxtjs/eslint-config --save-dev
npm install eslint-loader --save-dev

nuxt.config.js中build中添加如下配置

  /*
** Run ESLint on save
*/
extend (config, { isDev, isClient }) {
if (isDev && isClient) {
config.module.rules.push({
enforce: 'pre',
test: /\.(js|vue)$/,
loader: 'eslint-loader',
exclude: /(node_modules)/
})
}
}

新建.eslintrc.js文件,其中配置如下

module.exports = {
root: true,
env: {
browser: true,
node: true
},
parserOptions: {
parser: 'babel-eslint'
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
globals: {
'WeixinJSBridge': true
},
// add your custom rules here
rules: {
"semi": [2, "never"],
"no-console": "off",
"vue/max-attributes-per-line": "off",
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// iview
'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }]
}
}

package.json中添加如下配置:

"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
"lintfix": "eslint --fix --ext .js,.vue --ignore-path .gitignore .",
"precommit": "npm run lint"

router配置篇

路由的编写也是写在权限控制的中间件middleware文件夹中

import { LoadingBar } from 'iview'
export default function ({ store, redirect }) {
store.app.router.beforeEach((to, from) => {
LoadingBar.start()
})
store.app.router.afterEach((to, from) => {
LoadingBar.finish()
window.scrollTo(0, 0)
})
}

nuxt 项目安装及环境配置的更多相关文章

  1. (Win10)Java,Maven,Tomcat8.0,Mysql8.0.15安装与环境配置,以及IDEA2019.3使用JDBC连接MySQL、创建JavaEE项目

    之前用windows+linux的双系统,最近不怎么舒服就把双系统给卸了,没想到除了问题,导致有linux残余,于是就一狠心重装了电脑,又把Java及其相关的一些东西重新装了回来,还好当初存了网盘链接 ...

  2. Laravel教程 一:安装及环境配置

    Laravel教程 一:安装及环境配置 此文章为原创文章,未经同意,禁止转载. Homestead 最近在SF上面看到越来越多的Laravel相关的问题,而作为一个Laravel的脑残粉,本来打算有机 ...

  3. Yeoman入门之安装及环境配置

    Yeoman入门之安装及环境配置 http://blog.csdn.net/panlingfan/article/details/27345037 http://www.nodejs.orgYEOMA ...

  4. Infer 在 Mac 上的安装和环境配置

    Infer 在 Mac 上的安装和环境配置 Infer 介绍 Infer 是一个静态分析工具.Infer 可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使 ...

  5. Python学习(一)安装、环境配置及IDE推荐

    Python的安装.环境配置及IDE推荐 官网:https://www.python.org/ 版本:2.x 和 3.x 差别较大:python3是不向下兼容:版本区别可参考网官网介绍 至于选择 Py ...

  6. Node.js与VUE安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇 https://www.cnblogs.com/zhouyu2017/p/6485265.html Node.js安装及环境配置之Windows篇htt ...

  7. win系统下nodejs安装及环境配置

    第一步:下载安装文件下载nodejs,官网:http://nodejs.org/download/,我这里下载的是node-v0.10.28-x86.msi,如下图: 第二步:安装nodejs下载完成 ...

  8. Python学习 1 一 Python2.75的安装及环境配置教程

    Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方 ...

  9. Node.js安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇   一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1. ...

随机推荐

  1. Pythonweb采集

    一.访问页面 import webbrowser webbrowser.open('http://www.baidu.com/')    pip3 install requests import re ...

  2. 什么是mysql innodb cluster?

    目录 一.简介 二.特性 一.简介 MySQL InnoDB集群提供了一个集成的,本地的,HA解决方案.MySQL InnoDB集群由以下几部分组成: MySQL Servers with Group ...

  3. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  4. 学Java,Java书籍的最佳阅读顺序

    疫情以来,好久没出差了,今天出差去趟上海,早上 4 点多就起床了,到机场天都没亮.到登机口离起飞还一小时,趁着等飞机的时间,抓紧码字,把这篇文章收个尾. 今天和大家说说学 Java 的读书路线.路线中 ...

  5. IO多路复用技术总结

    来源:微信公众号「编程学习基地」 IO 多路复用概述 I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用. 在IO多路复用技术 ...

  6. 用 Go 实现一个 LRU cache

    前言 早在几年前写过关于 LRU cache 的文章: https://crossoverjie.top/2018/04/07/algorithm/LRU-cache/ 当时是用 Java 实现的,最 ...

  7. CF125A Measuring Lengths in Baden 题解

    Content 在 Baden,一英寸等于 \(3\) 厘米,一英尺等于 \(12\) 英寸. 现在有一个 \(n\) 厘米的物体,求在 Baden,它是几英尺又几英寸. 数据范围:\(1\leqsl ...

  8. urllib结合 concurrent.futures 多线程下载文件。

    示例: #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 2020/12/16 10:42 # @Author:zhangmingda # ...

  9. AcWing 1113. 红与黑

    1.题目描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖. 你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动. 请写一个程序,计算你总共能够到达多少块黑色的瓷砖 ...

  10. springboot目录结构、重要配置文件、重要注解的详解

    前面2篇博客已经带着大家搭建了springboot项目,并编写了持久化接口部署到tomcat下访问.这里我们一起补充下springboot的基本信息 一.springboot简单介绍 springbo ...