确保安装了npx(npx 在 npm 版本 5.2.0 默认安装了):
npx create-nuxt-app <项目名>
或者使用yarn:
yarn create nuxt-app <项目名>
在创建项目时,会让你进行一些配置的选择,可参考文档:运行create-nuxt-app
默认别名设置
~
或 @
srcDir
~~
或 @@
rootDir
默认情况下,srcDir 和 rootDir 相同。
该文件是Nuxt框架的主要配置文件,其大多数配置都可以在这里进行配置。这里将依次介绍各个模块中可以配置哪一些属性:
head: {
title: '学习nuxt框架',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
],
script: [
{
src: '/flexible/flexible.js',
type: 'text/javascript',
charset: 'utf-8',
},
],
},
node-sass
和 sass-loader
npm install --save-dev node-sass sass-loader
预处理器安装后,Nuxt.js 会自动识别被导入文件的扩展名,之后,webpack 会使用相应的预处理器进行处理。前提是,你安装了对应预处理器。
css: [
// 重置 css 样式
'@/assets/css/reset.css',
// 项目里要使用的 SCSS 文件 或 重置UI库的样式
'@/assets/css/main.scss'
]
这里配置的插件都必须放置在plugins目录下
该值类型为对象数组(如果只配置一个,可为字符串即文件的路径),每一个配置都是一个对象,并都具有以下属性:
String
(文件的路径)Boolean
(默认为 true
),如果设置为false
,该文件只会在客户端被打包。plugins: [
{ src: '@/plugins/vant', ssr: true },
{ src: '@/plugins/api', ssr: true },
{ src: '@/plugins/commonFuc', ssr: true },
{ src: '@/plugins/axios', ssr: false },
{ src: '@/plugins/router', ssr: false },
{ src: '@/plugins/vue-swiper', ssr: false },
{ src: '@/plugins/filter', ssr: false },
],
注意:
这里除了配置一些公用的js外,每次你需要使用 Vue.use()
时,你需要在 plugins/ 目录下创建相应的插件文件,并在 nuxt.config.js 中的 plugins 配置项中配置插件的路径。
Nuxt.js 团队提供 官方 模块:
modules: [
// Using package name
'@nuxtjs/axios',
// Relative to your project srcDir, 相对于您的项目srcDir
'~/modules/awesome.js',
// Providing options, 传入参数
['@nuxtjs/google-analytics', { ua: 'X1234567' }],
// Inline definition,直接内部定义
function () {}
]
注意:某一些模块的配置可以写在modules配置外,配置详情请参考模块的官方文档。如:
modules: [
'@nuxtjs/axios',
'@nuxtjs/auth',
],
auth: {
strategies: {
local: {
endpoints: {
login: { url: '/api/auth/login', method: 'post', propertyName: 'token' },
logout: { url: '/api/auth/logout', method: 'post' },
user: { url: '/api/auth/user', method: 'get', propertyName: 'user' }
},
tokenType: ''
},
},
fullPathRedirect: true,
watchLoggedIn: false,
},
axios: {
proxy: true, // 开启了代理,需要配置。也可在这里直接配置一个对象
credentials: true
},
proxy: { // 配置代理
'/api': {
target: 'http://api.example.com', // api
pathRewrite: {
'^/api': '',
},
changeOrigin: true,
logLevel: 'debug'
},
},
router: {
extendRoutes(routes, resolve) {
routes.push({
name: 'custom',
path: '*',
component: resolve(__dirname, 'pages/404.vue')
})
}
}
router: {
scrollBehavior(to, from, savedPosition) {
let position:any = false
if (
to.matched.length < 2 &&
to.matched.every(r => r.components.default.options.scrollToTop !== false)
) {
position = { x: 0, y: 0 }
} else if (to.matched.some(r => r.components.default.options.scrollToTop)) {
position = { x: 0, y: 0 }
}
if (savedPosition) {
position = savedPosition
}
return new Promise((resolve) => {
;(window as any).$nuxt.$once('triggerScroll', () => {
resolve(position)
})
})
// return { x: 0, y: 0 } // 配置所有页面渲染后滚动至顶部
},
}
其余详细配置属性请参考官方文档