switch (process.env.NODE_ENV) {
case 'prod':
case 'production':
module.exports = require('./config/webpack.prod');
break;
case 'test':
case 'testing':
module.exports = require('./config/webpack.test');
break;
case 'dev':
case 'development':
default:
module.exports = require('./config/webpack.dev');
}
webpack --config './path/to/config'
"server1": "webpack --config './path/to/config'"
npm run server1
import webpack from 'webpack'
const webpackConfig = { ... }
const webpackCompile = config => new Promise((resolve, reject) => {
webpack(config, (err, stats) => err ? reject(err) : resolve(status))
});
webpackCompile(webpackConfig)
.then((status) => {
alert('OK')
})
.catch((err) => {
alert('ERR')
})
chrome.browserAction.onClicked.addListener(function callback)
, как сделано в хромовских расширениях.--app/
----actions/
------index.js
------Article.js
----api/
------index.js
------Article.js
----stores/
------index.js
------Article.js
----pages/
------ArticlePage.js
------ArticlePage.less
----components/
------MyComponent.js
------MyComponent.less
----main.js
----router.js
----EventConstants.js
var React = require("react/addons");
var Fluxxor = require("fluxxor");
require("./ArticlePage.less");
var ArticlePage = React.createClass({
// Компоненты подписываются на изменения в store
mixins: [
Fluxxor.FluxMixin(React),
Fluxxor.StoreWatchMixin("article")
],
getStateFromFlux() {
// достаем данные из store
return {
articles: this.getFlux().store("article").getArticles()
};
},
componentWillMount() {
// вызываем action
this.getFlux().article.fetch();
},
render() {
// render articles
}
});
module.exports = ArticlePage;
var EC = require("../EventConstants");
var api = require("../api/");
module.exports = {
fetch() {
// в api делаем сам запрос к серверу
return api.article
.fetch()
.then(data => {
this.dispatch(EC.SERVER.RECEIVE_ARTICLES, data.articles);
return data.articles;
});
}
};
var Fluxxor = require("fluxxor");
var EC = require("../EventConstants");
var ArticleStore = Fluxxor.createStore({
initialize() {
this._articles = [];
this.bindActions(
// подписываемся на событие
EC.SERVER.RECEIVE_ARTICLES, this.handleReceive
);
},
/*========== Getters ==========*/
getArticles() {
return JSON.parse(JSON.stringify(this._articles));
},
/*========== handlers ==========*/
handleReceive(user) {
this._articles = user.addresses;
// Все компоненты которые подписаны на store будут уведомлены
// в них также визовется getStateFromFlux
this.emit("change");
},
});
module.exports = ArticleStore;
module.exports = {
UI: {
// тут ивенты которые не обращаются к серверу
},
SERVER: {
RECEIVE_ARTICLES: "SERVER:RECEIVE_ARTICLES",
}
};
var FluxCart = React.createClass({...})
var App = React.createClass({
render : function () {
var component = this.state.conditionToRenderCart ? <FluxCart /> : null;
return (
<div>
{component}
</div>
)
}
})
mixins : [
Reflux.listenTo(AActions.toggleOpen, 'onToggleOpen')
]
.wrapper
{
display: table;
width: 1px;
}