我缺少什么 Babelify presets/plugins 来解析这段代码?
What Babelify presets/plugins am I missing to parse this code?
我正在使用实现 Browserify-Rails to implement Babelify 的 Rails 4.0 项目。
在我的本地和远程 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 };
我猜我在这里使用的可能是 ES2015 以上的几个 JS 样式
所以我继续使用配置,添加增量,并更新到 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 plugins/presets 可能是我为了完成这项工作而缺少的。
年度预设仅包含当年添加的功能 - 即 es2017
不包含 es2015
和 es2016
预设中的任何内容!
这组预设应该可以解决您的问题:
es2015 es2016 es2017 react stage-0
也就是说,包含所有最新年度预设的首选方法是使用 env
preset,它会引入所有这些预设,一旦 ES2018 发布就会更新,并且还允许您配置基于如果需要,在您的目标环境中:
env react stage-0
我正在使用实现 Browserify-Rails to implement Babelify 的 Rails 4.0 项目。
在我的本地和远程 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 };
我猜我在这里使用的可能是 ES2015 以上的几个 JS 样式
所以我继续使用配置,添加增量,并更新到 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 plugins/presets 可能是我为了完成这项工作而缺少的。
年度预设仅包含当年添加的功能 - 即 es2017
不包含 es2015
和 es2016
预设中的任何内容!
这组预设应该可以解决您的问题:
es2015 es2016 es2017 react stage-0
也就是说,包含所有最新年度预设的首选方法是使用 env
preset,它会引入所有这些预设,一旦 ES2018 发布就会更新,并且还允许您配置基于如果需要,在您的目标环境中:
env react stage-0