Coffeescript неправильно компилируется в рельсах - PullRequest
0 голосов
/ 31 октября 2019

У меня есть похожий скрипт для кофе, подобный этому, в моей директории assets/javascript

#COFFEE SCRIPT CODE
class TestClass
  speak: ()->
    response = await fetch(location.url)
    console.log(response)

, он правильно скомпилирован с правильным синтаксисом async/await на официальной площадке Coffee-script

# COMPILED JS FROM COFFEESCRIPT OFFICIAL PLAYGROUND
var TestClass;

TestClass = class TestClass {
  async speak() {
    var response;
    response = (await fetch(location.url));
    return console.log(response);
  }

};

но когда я записываю это в файл и компилирую через конвейер ресурсов, он неправильно компилируется

# COMPILED JS FROM COFFEESCRIPT ASSESTS PIPELINE
TestClass = (function() {
    function TestClass() {}

    TestClass.prototype.speak = function() {
      var response;
      response = await(fetch(location.url));
      return console.log(response);
    };

    return TestClass;

  })();

я на rails v5.2 и ruby ​​v2.6.4 on macOS v10.14

$ bundle info coffee-script
      * coffee-script (2.4.1)
            Summary: Ruby CoffeeScript Compiler
            Homepage: http://github.com/josh/ruby-coffee-script
            Path: /Users/<username>/.rvm/gems/ruby-2.6.4/gems/coffee-script-2.4.1

мой файл gemlock

почему это происходит икак это исправить.

мне нужен правильный синтаксис async / await через мой конвейер ассетов

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

К сожалению, в геме coffee-rails не используется самая последняя версия CoffeeScript, и поэтому отсутствуют некоторые функции ES2017, такие как await, которые вы ищете.

*Само значение 1005 * зависит от драгоценного камня coffee-script-source, который можно увидеть равен все еще с использованием CoffeeScript v1.12.6:

# https://github.com/jessedoyle/coffee-script-source/blob/master/src/js/coffee-script.js

/**
 * CoffeeScript Compiler v1.12.6
 * http://coffeescript.org
 *
 * Copyright 2011, Jeremy Ashkenas
 * Released under the MIT License
 */
1 голос
/ 31 октября 2019

Драгоценный камень coffee-script-source устарел. Для более новых установок js предлагается использовать webpacker вместо конвейера ресурсов. Но это может быть большая реструктуризация.


Обходной путь

Был запрос на получение , предлагающий обходной путь для использования coffeescript 2:

вы можете использовать эту библиотеку с другими версиями CoffeeScript, установив переменную среды COFFEESCRIPT_SOURCE_PATH, но мы рекомендуем использовать WebPacker для CoffeeScript 2 и выше.

export COFFEESCRIPT_SOURCE_PATH=/path/to/coffee-script/extras/coffee-script.js

Вам нужно будет установить и найти исполняемый файл coffee-script 2 (если глобально он будет найден с which coffee, а локально с npm, то будет ./node_modules/.bin/coffee). Я не уверен, что ваш гем будет содержать правильную версию сценария кофе, поэтому я бы предложил вместо этого использовать npm или другой менеджер пакетов узлов.


На Heroku

Как запуститьна heroku на основе этого комментария Github

  1. Загрузите и сохраните автономный компилятор coffeescript в своем проекте rails (например, создайте новый каталог в корне проектавызываемый tools
  2. Установите env var для heroku, чтобы гем coffee-script-source использовал правильный компилятор:

    heroku config: set COFFEESCRIPT_SOURCE_PATH = / app / tools / coffeescript.js

(обычно /app - это каталог проекта на heroku, но вам, возможно, придется изменить его)

...