javascript – Docker容器中的Browsersync
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Docker容器中的Browsersync,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5308字,纯文字阅读大概需要8分钟。
内容图文
![javascript – Docker容器中的Browsersync](/upload/InfoBanner/zyjiaocheng/702/f63a611e9ada47d69c4d18513dd5eb0c.jpg)
我有一个Wordpress / MySQL docker容器,我用它来开发主题&插件.我在localhost:8000上访问它.
它使用Gulp构建过程&我正在尝试添加browsersync.我很难让browserync实际代理出容器.从Gulp输出中我可以看到它生成了更改,而实际上并没有在浏览器中进行任何更改.
继承人我的docker-compose.yml,gulpfile,dockerfile& shell脚本.
version: '2'
services:
wordpress_db:
image: mariadb
restart: 'always'
ports:
- 3360:3306
volumes:
- ./db_data:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
wordpress:
depends_on:
- wordpress_db
image: wordpress
restart: 'always'
environment:
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: wordpress
ports:
- 8000:3000
volumes:
- ./uploads:/var/www/html/wp-content/uploads
- ./plugins:/var/www/html/wp-content/plugins
- ./theme:/var/www/html/wp-content/themes/theme
links:
- wordpress_db:mysql
composer:
image: composer/composer:php7
depends_on:
- wordpress
restart: 'no'
environment:
ACF_PRO_KEY: this_would_be_my_ACF_pro_key_:)
volumes_from:
- wordpress
working_dir: /var/www/html/wp-content/themes/theme
command: install
node:
restart: 'no'
image: node:slim
depends_on:
- wordpress
volumes_from:
- wordpress
working_dir: /var/www/html/wp-content/themes/theme
build:
context: .
dockerfile: WordPressBuild
args:
- SITE_VERSION=0.0.1
var browserSync = require('browser-sync');
var reload = browserSync.reload;
var watchify = require('watchify');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var gulp = require('gulp');
var gutil = require('gulp-util');
var gulpSequence = require('gulp-sequence');
var processhtml = require('gulp-minify-html');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
var watch = require('gulp-watch');
var cleanCSS = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var streamify = require('gulp-streamify');
var sourcemaps = require('gulp-sourcemaps');
var concat = require('gulp-concat');
var babel = require('gulp-babel');
var fontawesome = require('node-font-awesome');
var prod = gutil.env.prod;
var one rror = function(err) {
console.log(err.message);
this.emit('end');
};
// bundling js with browserify and watchify
var b = watchify(browserify('./src/js/app', {
cache: {},
packageCache: {},
fullPaths: true
}));
gulp.task('js', bundle);
b.on('update', bundle);
b.on('log', gutil.log);
function bundle() {
return b.bundle()
.on('error', one rror)
.pipe(source('app.js'))
.pipe(buffer())
.pipe(sourcemaps.init())
.pipe(prod ? babel({
presets: ['es2015']
}) : gutil.noop())
.pipe(concat('app.js'))
.pipe(!prod ? sourcemaps.write('.') : gutil.noop())
.pipe(prod ? streamify(uglify()) : gutil.noop())
.pipe(gulp.dest('./assets/js'))
.pipe(browserSync.stream());
}
// fonts
gulp.task('fonts', function() {
gulp.src(fontawesome.fonts)
.pipe(gulp.dest('./assets/fonts'));
});
// sass
gulp.task('sass', function() {
return gulp.src('./src/scss/**/*.scss')
.pipe(sourcemaps.init())
.pipe(sass({
includePaths: [].concat(require('node-bourbon').includePaths, ['node_modules/foundation-sites/scss', 'node_modules/motion-ui/src', fontawesome.scssPath])
}))
.on('error', one rror)
.pipe(prod ? cleanCSS() : gutil.noop())
.pipe(prod ? autoprefixer({
browsers: ['last 2 versions'],
cascade: false
}) : gutil.noop())
.pipe(!prod ? sourcemaps.write('.') : gutil.noop())
.pipe(gulp.dest('./assets/css'))
.pipe(browserSync.stream());
});
gulp.task('watch', function(){
gulp.watch('./src/scss/**/*.scss', ['sass']);
gulp.watch('./src/js/**/*.js', ['js']);
});
// browser-sync task for starting the server.
gulp.task('serve', function() {
//watch files
var files = [
'./assets/css/*.scss',
'./*.php'
];
//initialize browsersync
browserSync.init(files, {
//browsersync with a php server
proxy: "localhost",
notify: false
});
gulp.watch('./src/scss/**/*.scss', ['sass']);
// gulp.task('default', gulpSequence(['fonts', 'sass', 'js', 'watch']));
});
// use gulp-sequence to finish building html, sass and js before first page load
gulp.task('default', gulpSequence(['fonts', 'sass', 'js'], 'serve'));
docker-compose.yml引用以下dockerfile:
FROM node
# Grab our version variable from the yml file
ARG SITE_VERSION
# Install gulp globally
RUN npm install -g gulp node-gyp node-sass
# Install dependencies
COPY ./gulp-build.sh /
RUN chmod 777 /gulp-build.sh
ENTRYPOINT ["/gulp-build.sh"]
CMD ["run"]
它安装gulp和node-sass,并将以下gulp-guild.sh脚本复制到容器中:
#!/bin/bash
cd /var/www/html/wp-content/themes/theme
# npm rebuild node-sass && npm install && gulp --dev
npm rebuild node-sass && npm install && gulp
解决方法:
您的配置的主要问题是您指向gulpfile中的localhost.这指向本地容器,而不是主机,因此browsersync将无法连接到Wordpress.
首先需要在其内部端口上更新gulpfile以指向wordpress服务:
browserSync.init(files, {
// The hostname is the name of your service in docker-compose.yml.
// The port is what's defined in your Dockerfile.
proxy: "wordpress:3000",
notify: false,
// Do not open browser on start
open: false
})
然后,您需要添加端口映射以从节点服务公开browsersync服务器.在docker-compose.yml文件中:
node:
ports:
- "3000:3000"
- "3001:3001"
您现在应该能够访问localhost:3001上的browsersync代理.
附:如果您在一个ngninx docker容器中有多个站点服务,则可以在/etc/nginx/conf.d/somesite.conf中编辑特定站点的nginx配置文件并添加新行:
听:3000;
内容总结
以上是互联网集市为您收集整理的javascript – Docker容器中的Browsersync全部内容,希望文章能够帮你解决javascript – Docker容器中的Browsersync所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。