Docker和gulp

4
我正在使用Windows 7,并在boot2docker上运行虚拟机。
docker-compose.yml:
web:
    image: nginx
    ports:
        - "80:80"
    volumes:
        - /var/www/docker/nginx/:/etc/nginx/conf.d/
        - /var/www/:/var/www/html/
    links:
        - php:php

php:
    build: php
    volumes:
        - /var/www/:/var/www/html/
        - /var/www/docker/php.ini:/usr/local/etc/php/php.ini
        - /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock
    links:
        - db:db

db:
    image: mysql
    ports:
        - "13306:3306"
    volumes:
        - /var/lib/boot2docker/mysql/:/var/lib/mysql/
    environment:
        - MYQSL_ROOT_PASSWORD=root

gulpfile.js:

var gulp = require('gulp');
var postcss = require('gulp-postcss');

var processors = [
  require('precss'),
  require('autoprefixer')({browsers: ['last 2 versions'] }),
  require('cssnano')
];

gulp.task('postcss', function() {
  gulp.src('gulp/stylesheets/*.css')
    .pipe(postcss(processors))
    .pipe(gulp.dest('assets/stylesheets/'))
});

gulp.task('watch-postcss', function() {
  gulp.watch("gulp/stylesheets/*.css", ["postcss"]);
});

我正在尝试在虚拟机外部使用Gulp和postcss编译我的CSS文件,但是似乎会破坏我的虚拟机共享文件夹中的输出文件。例如,如果我编译以下内容:

body {
  background: red;
}

我在输出文件中得到了这个(这就是我想要的):
body{background:red}

但是如果我这样重新编译postcss样式表:
body {
  text-align: center;
}

我在输出文件中看到了这个信息:

body{background:red}���

我的本地(Windows)文件已经正确更新,这个问题只存在于虚拟机共享文件夹中的文件中。

我是 Docker 的新手,不知道我做错了什么。我应该在虚拟机内运行 Gulp 吗?还是在容器内?如果是这样,我该如何在我的虚拟机/容器中安装和使用 Gulp?

或者是我在 docker-compose 文件中做错了什么吗?


我猜这是因为行尾符的缘故,参见https://dev59.com/y10b5IYBdhLWcg3wGN7f。 - sobolevn
1
@sobolevn 我不明白你的意思... 我需要将我的 CSS 文件转换为 UNIX 行结束符? - Plimee
我认为是这样。至于在哪个Windows版本上出现了这个错误,我不确定。 - sobolevn
@sobolevn 我尝试了对源文件和输出的 CSS 文件执行 dos2unix,但是没有任何改变。 - Plimee
请尝试使用 https://en.wikipedia.org/wiki/Unix2dos 进行转换。 - sobolevn
@sobolevn 我是不是应该在编译CSS文件之前或之后将Unix转换为DOS? 此外,当我执行这些perl命令时会出现错误:“无法进行不带备份的原地编辑。” - Plimee
1个回答

0
我相信这个问题是由nginx引起的。你应该在nginx虚拟主机配置中添加sendfile off;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接