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

1

Я использую проект 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 плагины/пресеты, которые я могу пропустить, чтобы сделать эту работу.

Теги:
ecmascript-6
babelify
browserify

1 ответ

2
Лучший ответ

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

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

es2015 es2016 es2017 react stage-0

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

env react stage-0
  • 0
    Эй!!! Большое спасибо, Джо! Честно говоря, я нигде не мог найти этот ответ. Спасибо!
  • 0
    @Trip: Рад, что я мог помочь, я думаю, что многие люди смущены этим! Для дальнейшего использования все официальные пресеты задокументированы здесь .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню