Я использую проект 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 плагины/пресеты, которые я могу пропустить, чтобы сделать эту работу.
Годовые пресеты содержат только те функции, которые были добавлены в этом году - т.е. es2017
не содержит никаких вещей из предварительных es2015
и es2016
!
Этот набор пресетов должен решить вашу проблему:
es2015 es2016 es2017 react stage-0
Тем не менее, предпочтительным способом включения всех последних годовых пресетов является использование предварительной настройки env
, которая извлекает все из них, будет обновляться после выпуска ES2018, а также позволяет настраивать объекты на основе целевой среды, если вы хотите:
env react stage-0