0

Я следую учебнику Tutsplus, который озаглавлен «Hands on Angularjs», в учебнике инструктор использует пакет grunt-connect-proxy для перенаправления ajax запрашивает сервер rails, запущенный на localhost: 3000, но я думаю, что учебник устарел, и на этой конкретной версии плагин livereload для пакета grunt-contrib-connect не использовал функцию промежуточного программного обеспечения, и теперь в текущей версии функция livereload использует промежуточное программное обеспечение, которое ведет меня к ошибке:Дублирующее свойство данных в объектном литерале не допускается в строгом режиме grunt-connect-proxy

>> SyntaxError: /Applications/MAMP/htdocs/savage-worlds/Gruntfile.js:113 
>>   middleware: function (connect) { 
>>   ^^^^^^^^^^ 
>> Duplicate data property in object literal not allowed in strict mode 

Это ворчание файл задания

// The actual grunt server settings 
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: { 
     middleware: function (connect, options) { 
      if (!Array.isArray(options.base)) { 
       options.base = [options.base]; 
      } 

      // Setup the proxy 
      var middlewares = [require('grunt-connect-proxy/lib/utils').proxyRequest]; 

      // Serve static files. 
      options.base.forEach(function(base) { 
       middlewares.push(connect.static(base)); 
      }); 

      // Make directory browse-able. 
      var directory = options.directory || options.base[options.base.length - 1]; 
      middlewares.push(connect.directory(directory)); 

      return middlewares; 
     }, 
     open: true, 
     middleware: function (connect) { 
     return [ 
      connect.static('.tmp'), 
      connect().use(
      '/bower_components', 
      connect.static('./bower_components') 
     ), 
      connect().use(
      '/app/styles', 
      connect.static('./app/styles') 
     ), 
      connect.static(appConfig.app) 
     ]; 
     } 
    } 
    }, 
    test: { 
    options: { 
     port: 9001, 
     middleware: function (connect) { 
     return [ 
      connect.static('.tmp'), 
      connect.static('test'), 
      connect().use(
      '/bower_components', 
      connect.static('./bower_components') 
     ), 
      connect.static(appConfig.app) 
     ]; 
     } 
    } 
    }, 
    dist: { 
    options: { 
     open: true, 
     base: '<%= yeoman.dist %>' 
    } 
    } 
}, 

Любая помощь будет оценена!

+0

Вы можете вставить код для gruntfile задачи? – br3w5

+0

@ br3w5 это задача grunt –

ответ

1

Ошибка, которую вы получаете, является ошибкой jslint. В нем указывается, в чем проблема: вы не можете использовать дублирующие свойства данных в объектном литерале.

В вашем файле grunt у вас есть задача, которая имеет дублирующие свойства, называемые middleware, в пределах параметров функции загрузки. Поэтому вам нужно включить любой код промежуточного кода в одно свойство.

Я не совсем знаком с печенью, но вы должны быть в состоянии поместить весь ваш код промежуточного программного обеспечения для работы с пером в один метод. Он также выглядит так: middlewares.push(connect.static(base)); делает все, что делает второй способ дублирования промежуточного программного обеспечения.

livereload: { 
    options: { 
     middleware: function (connect, options) { 
      if (!Array.isArray(options.base)) { 
       options.base = [options.base]; 
      } 

      // Setup the proxy 
      var middlewares = [require('grunt-connect-proxy/lib/utils').proxyRequest]; 

      // Serve static files. 
      options.base.forEach(function(base) { 
       middlewares.push(connect.static(base)); 
      }); 

      // Make directory browse-able. 
      var directory = options.directory || options.base[options.base.length - 1]; 
      middlewares.push(connect.directory(directory)); 

      return middlewares; 
     }, 
    } 
    } 

Если вы обнаружите, что некоторые статические активы отсутствуют, вы можете нажать на них middlewares массив:

middlewares.push((connect.static('./bower_components')) 
+0

Я пробовал это, но не работал, –

+0

// Служить статическим файлам. options.base.forEach (функция (база) { middlewares.push (connect.static ('. Tmp')); middlewares.push (connect.static ('./ bower_components')); middlewares.push (connect.static ('./ app/styles')); }); –