2017-06-22 71 views
1

我正在使用实现Browserify-Rails来实现Babelify的Rails 4.0项目。我缺少什么Babelify预设/插件来解析此代码?

在我的本地和远程Beta服务器上,似乎一切都会好起来。但是当我部署到生产环境时,如果某些文件中包含某个文件,则会跳过某个文件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插件/预置,我可能会为了使这项工作会丢失。

回答

2

年度预设仅包含当年添加的功能 - 即es2017不包含es2015es2016预设中的任何内容!

这组预设的应该解决您的问题:

es2015 es2016 es2017 react stage-0 

也就是说,首选的方式,包括所有最新的年度预设是使用env preset,它拉动所有的人,会更新一次ES2018已发布,并且还允许您根据自己的目标环境配置以下内容:

env react stage-0 
+0

呦!非常感谢乔!我真的无法在任何地方找到答案。谢谢! – Trip

+0

@Trip:很高兴我能帮上忙,我想很多人都会因此而感到困惑!为了将来的参考,所有正式的预设都记录在这里[http://babeljs.io/docs/plugins/]。 –