css - Vue 元素在生产中缺少样式

标签 css docker nginx vue.js proxy

当我运行我的docker镜像并使用nginx代理请求时,我遇到了样式问题。

我看到了所有 html 标签,当我查看浏览器中的网络选项卡时,我找到了 css 和 js 文件,CSS 对我来说看起来是正确的,但是 未应用样式。基本上,所有 html 标签看起来都很普通而且乏味。

当我开发时,我对样式没有任何问题,当我刚刚运行npm run build时,我也看到了样式。

该元素是使用 vue/cli 构建的,但我也尝试过使用早期版本的 webpack 的其他模板,导致了同样的问题。

.vue 文件中,我使用单文件组件结构并使用lang="scss"

我的 nginx.conf 看起来像这样:

load_module /usr/lib/nginx/modules/ngx_stream_module.so;

stream...

http {
    server {
        listen 80;
        charset utf-8;
        server_name vue-node;

        gzip                on;
        gzip_proxied        any;
        gzip_http_version   1.1;
        gzip_comp_level     5;
        gzip_min_length     256;
        gzip_vary           on;
        gzip_types text/css text/javascript text/xml text/plain application/javascript application/x-javascript application/json;

        root /opt/vue-node/dist;
        index index.html;

        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            access_log off;
            expires max;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        location /api {
            proxy_pass http://vuenode:8000;
        }

        location / {
            try_files $uri $uri/ @rewrites;
        }
        location @rewrites {
            rewrite ^(.+)$ /index.html last;
        }
    }
}

我的Dockerfile:

FROM node:9-stretch

RUN apt-get update -y && apt-get install -y --no-install-recommends \
    vim \
    nginx

COPY . /opt/vue-node/
WORKDIR /opt/vue-node/

RUN rm -v /etc/nginx/nginx.conf
ADD packaging/nginx.conf /etc/nginx/
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

RUN npm install -g npm \
 && npm install -g @vue/cli \
 && npm install \
 && npm run build

CMD [ "node", "server.js" ]
EXPOSE 80

我在 docker-compose.yml 中设置了 NODE_ENV=production。

其他一切都与 vue/cli 设置的差不多。

向我询问更多信息,我会提供。 我感谢我能得到的任何和所有帮助!

最佳答案

我已经找到了解决问题的方法。 问题是我对 Nginx 的无知。

当我覆盖/etc/nginx/nginx.conf时,一些必要的默认nginx配置丢失了。我不确定那是什么设置,但我读到最佳实践是在 /etc/nginx/sites-enabled/ 中添加自定义代理位置,该位置将被导入默认情况下通过 /etc/nginx/nginx.conf 文件。我最终得到:

Dockerfile:

COPY packaging/default.conf /etc/nginx/sites-enabled/default
COPY packaging/mongo.conf /etc/nginx/streams/available/mongo

默认.conf:

# no stream module..

server {
# a simple server module..
}

mongo.conf:

stream {
# the stream module, proxy to mongodb..
}

关于css - Vue 元素在生产中缺少样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50776307/

相关文章:

node.js - 如何杀死nodejs中 `spawn`创建的docker容器?

ssl - NGINX + HTTPS 导致外部请求出现 504 Gateway Timeout 错误

html - 强制同一 div 中的图像重叠

linux 环境下 Swift Perfect 编译命令失败

docker - 我如何在DigitalOcean Meteor up中部署Meteor应用程序:来自守护程序的错误响应:没有这样的容器

php - Laravel 路由不起作用,只有根路由起作用

使用 HTTP/2 作为 LAN 内部通信机制的 SSL 证书问题

javascript - JS改变背景颜色需要刷新页面?

html - 在 anchor 悬停状态中包含一个伪元素

css - 一行内联图像可能不会触发水平滚动条吗?