保存后javascript中的隐藏字符

时间:2017-11-14 16:16:02

标签: javascript docker nginx docker-compose gunicorn

this unanswered question类似。

我有一个使用docker-compose在docker容器中运行的应用程序,由nginx提供服务。前端脚本使用gulp编译到build.js文件中。

第一次调出docker容器时,build.js没有问题。大多数时候构建文件是重新创建的(我在开发期间不断重建),Chrome在\u0的末尾找到一串build.js个字符,导致它抛出错误Uncaught SyntaxError: Invalid or unexpected token

有时,当重新创建build.js时,服务于浏览器的build.js版本中会缺少一些字符:

build.js,本地版本:

var AnalyticsMixin = require('../mixins/AnalyticsMixin.vue');

build.js,浏览器版

var AnalalyticsMixin.vue');

这是文件末尾重复的\u0长字符串的补充。

我还有gulp任务缩小build.js并将内容的哈希值附加到文件名(文件名随每次新保存而变化)。这里的每个新文件都不会引发错误。

在另一种可能的转折中,当我们从一个烧瓶后端移动到一个炮弹时,这个问题只是它的头部。

这些字符似乎不在文件本身中 - 我在Chrome中的检查窗口中看到的版本比我的本地文件长一行。

根据建议here,我尝试在sendfile off;中设置nginx.conf。什么都没有改变。

这可能与我的docker-compose设置有关吗? nginx中的其他东西?

加了:

这是加载build.js(或缩小版本)的文件。该文件的名称在两个评论index.htmlinject:js之间通过gulp注入endinject

的index.html:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
</head>
<body>
  <div id="app" ><router-view></router-view></div>

  <!-- inject:js -->
  <script src="/js/build.js"></script>
  <!-- endinject -->
</body>
</html>

1 个答案:

答案 0 :(得分:0)

我最终通过为开发和生产创建单独的Dockerfile来解决这个问题 - 开发用的是使用flask的服务器。 gunicorn似乎是罪魁祸首,但只有在重新创建时才会出现。为build.js提供新内容,这对于制作来说不是问题。

Dockerfile仅使用flask的默认开发服务器:

FROM python:3
ENV MODE dev
EXPOSE 8080

RUN apt-get update
RUN apt-get install -y freetds-dev

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY . /usr/src/app

RUN python3 setup.py install
CMD python3 manage.py dev

Dockerfile_prod,使用gunicorn服务器

FROM python:3
ENV MODE dev
EXPOSE 8080

RUN apt-get update
RUN apt-get install -y freetds-dev

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY . /usr/src/app

RUN python3 setup.py install
CMD gunicorn -w 3 -b 0.0.0.0:8080 wsgi

使用Dockerfile_prod而不是默认Dockerfile来构建图片:

docker build -f Dockerfile_prod