docker环境部署 pm2守护nuxt.js进程 自定义api、axios、less、全局less变量、url-loader、全局css,js等配置
# install dependencies
$ yarn install
# serve with hot reload at localhost:3000
$ yarn dev
# build for production and launch server
$ yarn build
$ yarn start
# generate static project
$ yarn generate
# create docker image
docker build -t nuxt-demo .
# start server
docker run -d -p 3000:3000 --name nuxt-demo1 nuxt-demo
# start server and enter container
docker run -it -p 3000:3000 --name nuxt-demo1 nuxt-demo
# 安装pm2一样
$ npm install -g pm2
# 物理机启动pm2守护nuxt.js
$ pm2 start nuxt --name nuxt-demo -- start -i 0
# docker启动pm2守护nuxt.js
$ pm2-runtime start nuxt --name nuxt-demo -- start -i 0
# or
$ pm2-docker start nuxt --name nuxt-demo -- start -i 0
1. nuxt.js有注入context和vue实例的概念plugin,context是服务端执行时的全局实例,vue实例是客户端执行时的实例,所以,可以将api的类分别注入context和vue
plugins/api.server.js:
import * as apiServer from '@/api/api.server.js'
export default ({ app }, inject) => {
inject('apiServer', apiServer) // 默认添加‘$’符
}
nuxt.config.js:
// 将api对象挂载在 context实例上( *.server 或者 mode:server 代表服务端使用)
// 客服端代码引入rem.js(*.client 或者 mode:client 代表客户端使用)
export default {
plugins: [
{ src: '~plugins/api.server.js' },
{ src: '~plugins/rem.js', mode: 'client' }
]
}
pages/report_app.vue
export default {
async asyncData (context) {
const { payDetail } = context.app.$apiServer
const res = await payDetail({
classId: 12233
})
}
}
2. 引入api文件
pages/report_app.vue
import { payDetail } from '@/api/api.server.js'
export default {
async asyncData (context) {
const res = await payDetail({
classId: 12233
})
}
}
nuxt.config.js:
export default {
/*
** Global CSS
*/
css: [
// 项目里要使用的 全局CSS 文件
'~assets/css/common_flex.css'
],
plugins: [
{ src: '~plugins/rem.js', mode: 'client' }
]
}
package.json
"dependencies": {
"@nuxtjs/style-resources": "^1.0.0"
}
nuxt.config.js:
export default {
// 全局注册less变量的文件
styleResources: {
less: './assets/css/common_less.less'
}
}
nuxt.config.js:
export default {
build: {
loaders: {
imgUrl: { limit: 10000 }
}
}
}
有人会疑惑为什么是imgUrl不是url-loader呢? 可以查看nuxt.js的webpack源码其中base.js能看以下代码
{
test: /\.(png|jpe?g|gif|svg|webp)$/i,
use: [{
loader: 'url-loader',
options: Object.assign(
this.loaders.imgUrl, // 就是这里
{ name: this.getFileName('img') }
)
}]
}
配置server.host为 '0.0.0.0'即可。因为,nuxt.js host默认值是 ‘localhost’,node.js有经验的人一看就明白,不明白的可以详情了解以下,这里简单说明,不详解以免误人子弟。 localhost 只是 127.0.0.1 的别名,指本地地址。 0.0.0.0 指任意IPv4地址,都可以访问,所以,使用公有地址和内部地址都可以访问3000端口
nuxt.config.js:
export default {
server: {
host: '0.0.0.0', // default: localhost
}
}
- 项目中引用资源时,使用~报错,就用@/试一试。 For detailed explanation on how things work, check out Nuxt.js docs.