zoukankan      html  css  js  c++  java
  • nuxt 项目安装及环境配置

    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)
      })
    }
  • 相关阅读:
    poj 3378 Crazy Thairs 夜
    1487. Chinese Football 夜
    容斥原理
    Dancing Links
    三角剖分
    模线性方程模板
    模线性方程
    容斥原理 POJ2773
    DNA Sequence [矩阵]
    hdu 2588 容斥
  • 原文地址:https://www.cnblogs.com/ToBeBest/p/11691435.html
Copyright © 2011-2022 走看看