3

我将 Rails 用于我的 API,AngularJS 在前面,我在让 livereload / grunt 连接代理正常工作时遇到了一些问题。

这是我的 gruntfile 的片段:

connect: {
      options: {
        port: 9000,
        // Change this to '0.0.0.0' to access the server from outside.
        hostname: 'localhost',
        livereload: 35729
      },
      proxies: [
        {
          context: '/api',
          host: 'localhost',
          port: 3000
        }
      ],
      livereload: {
        options: {
          open: true,
          base: [
            '.tmp',
            '<%= yeoman.app %>'
          ],
          middleware: function (connect, options) {
            var middlewares = [];
            var directory = options.directory || options.base[options.base.length - 1];

            // enable Angular's HTML5 mode
            middlewares.push(modRewrite(['!\\.html|\\.js|\\.svg|\\.css|\\.png$ /index.html [L]']));

            if (!Array.isArray(options.base)) {
              options.base = [options.base];
            }
            options.base.forEach(function(base) {
              // Serve static files.
              middlewares.push(connect.static(base));
            });

            // Make directory browse-able.
            middlewares.push(connect.directory(directory));

            return middlewares;
          }
        }
      },
      test: {
        options: {
          port: 9001,
          base: [
            '.tmp',
            'test',
            '<%= yeoman.app %>'
          ]
        }
      },
      dist: {
        options: {
          base: '<%= yeoman.dist %>'
        }
      }
    }

如果我“咕噜咕噜”地构建一切都完美 - 关闭localhost:3000

但是,如果我“咕哝服务”,它会打开一个窗口127.0.0.1:9000,我的所有 API 调用都会收到 404。

同样在服务下,它正在从 CSS 文件中修改我的背景图像,我收到以下警告:

Resource interpreted as Image but transferred with MIME type text/html: "http://127.0.0.1:9000/images/RBP_BG.jpg"

我以前没有这样做过 - 所以我很可能做错了。

4

3 回答 3

5

connect.livereload.middleware我不喜欢您的配置中有太多代码。
这都是必要的吗?

看看这个提交 -chore(yeoman-gruntfile-update): configured grunt-connect-proxy在我的一些项目中。

于 2014-02-09T05:03:31.637 回答
3

这是一篇旧文章,但请确保您通过configureProxies在 livereload 之前调用实际初始化 grunt 服务任务中的代理。

grunt.task.run([
  'clean:server',
  'bower-install',
  'concurrent:server',
  'autoprefixer',
  'configureProxies',
  'connect:livereload',
  'watch'
]);

之后应该可以正常工作。

于 2014-04-04T21:19:57.607 回答
0

我和你有类似的问题,但我没有用 yeoman。

我的解决方案是添加任务“configureProxies”。

这是我的任务:

grunt.registerTask('serve', ['connect:livereload','configureProxies', 'open:server', 'watch']);

和,'connect:livereload','configureProxies'——经过我的测试,这两个任务的顺序不会影响结果。

github grunt-connect-proxy

于 2015-10-30T09:23:44.947 回答