[关闭]
@Bios 2018-12-10T08:37:39.000000Z 字数 2556 阅读 1317

Nuxt.js 入坑指南

NuxtJs Vue


基于nuxt2.0

安装创建项目

$ yarn create nuxt-app <项目名>

或者:

$ npx create-nuxt-app <项目名>

确保安装了npx(npx在NPM版本5.2.0默认安装了)

生成的目录结构

  1. ├─assets 资源目录,未编译的静态资源如lessjs
  2. ├─components 组件目录
  3. ├─layouts 布局目录
  4. ├─middleware 中间件
  5. ├─node_modules
  6. ├─pages 页面目录
  7. ├─index.vue
  8. ├─....
  9. ├─plugins 插件
  10. ├─static 静态文件目录
  11. ├─store vuex store

上下文对象 context

实际项目开发相关的配置

配置 Sass

$ yarn add node-sass sass-loader -D

yarn安装node-sass可能会报错,可以用npm安装

安装成功之后,就可以写sass了。

  1. // nuxt.config.js
  2. css: [
  3. '@/assets/css/index.scss'
  4. ]
  1. async asyncData ({ app }) {
  2. let { data } = await app.$axios.get('https://api.myjson.com/bins/cg8ga')
  3. return { data }
  4. }

配置 axios

$ yarn add @nuxtjs/axios @nuxtjs/proxy

  1. // nuxt.config.js
  2. modules: [
  3. '@nuxtjs/axios'
  4. ],
  5. // 跨域代理
  6. axios: {
  7. prefix: '/api',
  8. proxy: true // Can be also an object with default options
  9. },
  10. proxy: {
  11. '/api': {
  12. target: 'http://xxx',
  13. pathRewrite: {'^/api/': ''}
  14. }
  15. },
  1. // plugins/axios.js
  2. export default function ({ $axios, redirect }) {
  3. $axios.onRequest(config => {
  4. // console.log(1)
  5. console.log('Making request to ' + config.url)
  6. })
  7. $axios.onResponse(response=>{
  8. if (process.browser) { //判断是否为客户端
  9. console.log('on response!')
  10. }
  11. })
  12. $axios.onError(error => {
  13. const code = parseInt(error.response && error.response.status)
  14. if (code === 400) {
  15. redirect('/400')
  16. }
  17. })
  18. }
  19. // nuxt.config.js
  20. plugins: [
  21. '~/plugins/axios'
  22. ],

引入 Jquery 和 Boostrap

  1. head: {
  2. title: 'xxx',
  3. meta: [
  4. { charset: 'utf-8' },
  5. { name: 'viewport', content: 'width=device-width, initial-scale=1' },
  6. { hid: 'description', name: 'description', content: pkg.description }
  7. ],
  8. link: [
  9. { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
  10. { rel: 'stylesheet', type: 'text/css', href: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'}
  11. ],
  12. script: [
  13. {src: 'https://code.jquery.com/jquery-3.1.1.min.js'},
  14. {src: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'}
  15. ]
  16. }

引入 element-ui

$ yarn add element-ui

  1. // plugins/element-ui.js
  2. import Vue from 'vue'
  3. import ElementUI from 'element-ui'
  4. export default ()=>{
  5. Vue.use(ElementUI)
  6. }
  7. // nuxt.config.js
  8. css:[
  9. 'element-ui/lib/theme-chalk/index.css'
  10. ],
  11. plugins:[
  12. '~/plugins/element-ui'
  13. ]

到此,就可以在页面中使用了。

要安装babel-plugin-component

$ yarn add babel-plugin-component -D

  1. // plugins/element-ui.js
  2. import Vue from 'vue'
  3. import {Button} from 'element-ui' // 引入按钮组件
  4. export default ()=>{
  5. Vue.use(Button)
  6. }

引入FontAwesome

  1. css: [
  2. '@assets/font-awesome-4.7.0/css/font-awesome.min.css'
  3. ]

可以将解压出来的文件中的Less和sass文件删除,只保留css文件。也可以只保留sass或者less。减少没有用的代码!

注入 Vue 实例

  1. // plugins/vue-inject.js
  2. import Vue from 'vue'
  3. Vue.prototype.$myInjectedFunction = (string) => console.log("This is an example", string)
  4. // nuxt.config.js
  5. plugins: ['~/plugins/vue-inject']

在页面中使用 this.$myInjectedFunction('test')调用

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注