Какие пресеты / плагины Babelify мне не хватает для разбора этого кода?

Я использую проект Rails 4.0, который реализует Browserify-Rails для реализации Babelify.

Кажется, все идет неуклюже, как на моем локальном, так и на удаленном бета-сервере. Но при развертывании в производство некоторые файлы будут пропущены, если в них есть require(""),

Мои оригинальные настройки были такими:

config.browserify_rails.commandline_options = ["-t [ babelify --presets [ es2015 react stage-0 ] --plugins [ syntax-async-functions transform-regenerator ] ]"]

Что заставило его пропустить файл, в котором была эта строка:

var { configureStore } = require('./configureStore');

Это требует привести здесь:

let { createStore, combineReducers, applyMiddleware, compose } = require('redux');
let thunk = require('redux-thunk').default
let session = require('./reducers/session').default;
let search = require('./reducers/search').default;

const configureStore = () => {
  const reducers = combineReducers({
    session,
    search,
  });

  const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

  return createStore(
    reducers,
    composeEnhancers(applyMiddleware(thunk))
  );
}

export { configureStore };

Я догадался, может быть, есть пара стилей JS, которые я использую здесь, которые выше ES2015

Поэтому я пошел дальше и поиграл с конфигами, добавив Incremental и обновляя ES2017. Который получил меня мимо этого сломанного файла. Мой новый конфиг выглядел так:

config.browserify_rails.use_browserifyinc = true
config.browserify_rails.commandline_options = ["-t [ babelify --presets [ es2017 react stage-0 ] --plugins [ syntax-async-functions transform-regenerator ] ]", "-t coffeeify --extension=\".js.coffee\""]

Но это доходит до этой строки в следующем файле:

let { search } = require('../../actions/search');

Который загружает это (и имейте в виду, следующий файл был проанализирован и переведен просто отлично):

export const SEARCH_RESULTS_RECEIVED = 'SEARCH_RESULTS_RECEIVED';

export const search = (term, token) => {
  return (dispatch) => {
    if (term && term.trim() !== '') {
      return _search(term, token).then((results) => dispatch(resultsReceived(results)));
    } else {
      return dispatch(resultsReceived([]));
    }
  }
};

const _search = (term, token) => {
  let promise = new Promise((resolve, reject) => {
    fetch(encodeURI(`/api/search?search=${term}`), {
      headers: {
        "Content-Type": "application/json",
        "Authorization": `Token ${token}`
      }
    })
    .then(response => response.json())
    .then(function(response) {
      return resolve(response.results);
    })
    .catch((error) => {
      return reject(error);
    });
  });

  return promise;
};

export const resultsReceived = (searchResults) => ({
  type: SEARCH_RESULTS_RECEIVED,
  searchResults
});

Мне любопытно, есть ли какие-нибудь плагины / пресеты Babelify, которые я мог бы пропустить, чтобы сделать эту работу.

1 ответ

Решение

Годовые пресеты содержат только функции, которые были добавлены в этом году - т.е. es2017 не включает в себя какие-либо вещи из es2015 а также es2016 пресеты!

Этот набор пресетов должен решить вашу проблему:

es2015 es2016 es2017 react stage-0

Тем не менее, предпочтительным способом включения всех последних ежегодных пресетов является использование env Предустановка, которая включает все из них, будет обновляться после выпуска ES2018, а также позволяет вам настраивать параметры на основе вашей целевой среды, если вы хотите:

env react stage-0
Другие вопросы по тегам