Gulp Browsersync and http-proxy-middleware in offline mode
如果我代理到本地主机服务器,带有http-proxy-middleware的Browsersync是否可以脱机工作?
我在
1 | [HPM] Proxy error: ENOENT localhost:8080/data/pet |
在浏览器控制台上:
1 | Failed to load resource: the server responded with a status of `500 (Internal Server Error)` |
我知道错误不在服务器上,因为我仍然可以通过浏览器访问
由于api服务器是在本地部署的,因此需要Internet连接代理http请求似乎很奇怪。
带有所有配置的角度应用程序是使用generator-gulp-angular生成的
这是我的gulp服务器配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 'use strict'; var path = require('path'); var gulp = require('gulp'); var conf = require('./conf'); var browserSync = require('browser-sync'); var browserSyncSpa = require('browser-sync-spa'); var util = require('util'); var proxyMiddleware = require('http-proxy-middleware'); function browserSyncInit(baseDir, browser) { browser = browser === undefined ? 'default' : browser; var routes = null; if (baseDir === conf.paths.src || (util.isArray(baseDir) && baseDir.indexOf(conf.paths.src) !== -1)) { routes = { '/bower_components': 'bower_components' }; } var server = { baseDir: baseDir, routes: routes }; server.middleware = proxyMiddleware('/data', { target: 'http://localhost:8080' }); browserSync.instance = browserSync.init({ startPath: '/', server: server, browser: browser, online: false }); } browserSync.use(browserSyncSpa({ selector: '[ng-app]'// Only needed for angular apps })); gulp.task('serve', ['watch'], function () { browserSyncInit([path.join(conf.paths.tmp, '/serve'), conf.paths.src]); }); gulp.task('serve:dist', ['build'], function () { browserSyncInit(conf.paths.dist); }); gulp.task('serve:e2e', ['inject'], function () { browserSyncInit([conf.paths.tmp + '/serve', conf.paths.src], []); }); gulp.task('serve:e2e-dist', ['build'], function () { browserSyncInit(conf.paths.dist, []); }); |
这是我的package.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | { "name":"petStore", "version":"0.0.0", "dependencies": {}, "scripts": { "test":"gulp test" }, "devDependencies": { "gulp":"~3.9.0", "gulp-autoprefixer":"~2.3.1", "gulp-angular-templatecache":"~1.6.0", "del":"~1.2.0", "lodash":"~3.9.3", "gulp-csso":"~1.0.0", "gulp-filter":"~2.0.2", "gulp-flatten":"~0.0.4", "gulp-jshint":"~1.11.0", "gulp-load-plugins":"~0.10.0", "gulp-size":"~1.2.1", "gulp-uglify":"~1.2.0", "gulp-useref":"~1.2.0", "gulp-util":"~3.0.5", "gulp-ng-annotate":"~1.0.0", "gulp-replace":"~0.5.3", "gulp-rename":"~1.2.2", "gulp-rev":"~5.0.0", "gulp-rev-replace":"~0.4.2", "gulp-minify-html":"~1.0.3", "gulp-inject":"~1.3.1", "gulp-protractor":"~1.0.0", "gulp-sourcemaps":"~1.5.2", "gulp-less":"~3.0.3", "gulp-angular-filesort":"~1.1.1", "main-bower-files":"~2.8.0", "merge-stream":"~0.1.7", "jshint-stylish":"~2.0.0", "wiredep":"~2.2.2", "karma":"~0.12.36", "karma-jasmine":"~0.3.5", "karma-phantomjs-launcher":"~0.2.0", "karma-angular-filesort":"~0.1.0", "karma-ng-html2js-preprocessor":"~0.1.2", "concat-stream":"~1.5.0", "require-dir":"~0.3.0", "browser-sync":"~2.7.12", "browser-sync-spa":"~1.0.2", "http-proxy-middleware":"~0.2.0", "chalk":"~1.0.0", "uglify-save-license":"~0.4.1", "wrench":"~1.5.8" }, "engines": { "node":">=0.10.0" } } |
这是http调用:
1 2 3 | $http.get("/data/pet").then(function (result) { vm.petName = result.data.name; }); |
还有bower.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { "name":"petStore", "version":"0.0.0", "dependencies": { "angular-resource":"~1.4.0", "angular-ui-router":"~0.2.15", "bootstrap":"~3.3.4", "angular-bootstrap":"~0.13.0", "malarkey":"yuanqing/malarkey#~1.3.0", "toastr":"~2.1.1", "moment":"~2.10.3", "animate.css":"~3.3.0", "angular":"~1.4.0" }, "devDependencies": { "angular-mocks":"~1.4.0" }, "resolutions": { "angular":"~1.4.0" } } |
刚刚做了一些测试,我可以确认这个问题。
用" npm test"运行库测试。
它将设置实际的服务器以运行某些测试。
在线时,所有测试均成功。
但是当脱机运行测试时,它将产生相同的错误消息。
实际的代理功能由node-http-proxy提供。
已在以下位置报告此问题:
https://github.com/nodejitsu/node-http-proxy/issues/835
我也很好奇为什么不能离线使用http-proxy。
(免责声明:我是http-proxy-middleware的作者。)
看起来核心浏览器同步不需要互联网连接。 一些功能。
以下设置可让您将浏览器同步切换到离线模式:https://browsersync.io/docs/options/#option-online
我在server.js文件中设置了此属性,我的应用程序离线运行:
startPath: '/',
server: server,
browser: browser,
online: false
});