diff --git a/frontend/.babelrc b/frontend/.babelrc index 983f315f..e47fbbb5 100644 --- a/frontend/.babelrc +++ b/frontend/.babelrc @@ -29,7 +29,11 @@ "polyfill": false, "regenerator": false } - ] + ], + ["babel-plugin-webpack-loaders", { + "config": "${CONFIG}", + "verbose": true + }] ] } } diff --git a/frontend/package.json b/frontend/package.json index f11f79dd..d3375b06 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,7 @@ "scripts": { "start": "webpack-dev-server --open --config webpack/index.js", "lint": "eslint .", - "test": "NODE_ENV=test nyc ava test/*.js --verbose", + "test": "BABEL_DISABLE_CACHE=1 NODE_ENV=test CONFIG=$(pwd)/webpack/index.js nyc ava test/*.js --verbose", "open": "nyc report --reporter=html & open coverage/index.html", "coverage": "nyc check-coverage --statements 100 --functions 100 --lines 100 --branches 100", "build-locales": "NODE_ENV=test babel-node scripts/build-locales" @@ -46,6 +46,7 @@ "babel-plugin-transform-es2015-modules-commonjs": "^6.16.0", "babel-plugin-transform-object-rest-spread": "^6.16.0", "babel-plugin-transform-runtime": "^6.15.0", + "babel-plugin-webpack-loaders": "^0.8.0", "babel-preset-react": "^6.16.0", "babel-register": "^6.16.3", "css-loader": "^0.25.0", diff --git a/frontend/webpack/config.js b/frontend/webpack/config.js index aca8b5d4..01ea94c2 100644 --- a/frontend/webpack/config.js +++ b/frontend/webpack/config.js @@ -4,6 +4,35 @@ const webpack = require('webpack'); const WebpackShellPlugin = require('webpack-shell-plugin'); const path = require('path'); +const plugins = { + 'no-errors-plugin': new webpack.NoErrorsPlugin(), + 'extract-text-plugin': new ExtractTextPlugin({ + filename: 'bundle.css', + allChunks: true + }), + 'loader-options-plugin': new webpack.LoaderOptionsPlugin({ + options: { + postcss: { + plugins: () => { + return [ + require('postcss-cssnext') + ]; + } + } + } + }), + 'define-plugin': new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env['NODE_ENV'] || 'development'), + APP_NAME: JSON.stringify(pkg.name), + APP_VERSION: JSON.stringify(pkg.version) + } + }), + 'shell-plugin': new WebpackShellPlugin({ + onBuildStart: ['npm run build-locales'] + }) +}; + module.exports = { context: path.join(__dirname, '../src'), output: { @@ -12,32 +41,11 @@ module.exports = { filename: 'bundle.js' }, plugins: [ - new webpack.NoErrorsPlugin(), - new ExtractTextPlugin({ - filename: 'bundle.css', - allChunks: true - }), - new webpack.LoaderOptionsPlugin({ - options: { - postcss: { - plugins: () => { - return [ - require('postcss-cssnext') - ]; - } - } - } - }), - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify(process.env['NODE_ENV'] || 'development'), - APP_NAME: JSON.stringify(pkg.name), - APP_VERSION: JSON.stringify(pkg.version) - } - }), - new WebpackShellPlugin({ - onBuildStart: ['npm run build-locales'] - }) + plugins['no-errors-plugin'], + plugins['extract-text-plugin'], + plugins['loader-options-plugin'], + plugins['define-plugin'], + plugins['shell-plugin'] ], module: { loaders: [{ @@ -67,3 +75,5 @@ module.exports = { }] } }; + +module.exports.__plugins = plugins; diff --git a/frontend/webpack/test.js b/frontend/webpack/test.js new file mode 100644 index 00000000..d9a6353e --- /dev/null +++ b/frontend/webpack/test.js @@ -0,0 +1,37 @@ +const config = require('./config'); +const webpack = require('webpack'); +const path = require('path'); + +module.exports = { + output: { + libraryTarget: 'commonjs2', + }, + plugins: [ + config.__plugins['no-errors-plugin'], + config.__plugins['loader-options-plugin'], + config.__plugins['define-plugin'] + ], + module: { + loaders: [{ + test: /\.css?$/, + loader: [ + 'style-loader', { + loader: 'css-loader', + options: { + modules: true, + importLoaders: 1 + } + }, { + loader: 'postcss-loader', + options: { + plugins: function() { + return [ + require('postcss-cssnext') + ]; + } + } + } + ] + }] + } +}; \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 05005874..05b0f3a7 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -590,6 +590,10 @@ babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" +babel-plugin-syntax-class-constructor-call@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.13.0.tgz#96fb2e9f177dca22824065de4392f2fe3486b765" + babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" @@ -598,14 +602,26 @@ babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + babel-plugin-syntax-flow@^6.3.13, babel-plugin-syntax-flow@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.13.0.tgz#9af0cd396087bf7677053e1afa52f206c0416f17" +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.13.0.tgz#e741ff3992c578310be45c571bcd90a2f9c5586e" @@ -634,6 +650,14 @@ babel-plugin-transform-async-to-generator@^6.16.0: babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.0.0" +babel-plugin-transform-class-constructor-call@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.8.0.tgz#6e740bc80f16d295fa598d92518666020a906192" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-plugin-transform-class-properties@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" @@ -653,6 +677,13 @@ babel-plugin-transform-decorators@^6.13.0: babel-template "^6.8.0" babel-types "^6.13.0" +babel-plugin-transform-do-expressions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.0.0" + babel-plugin-transform-es2015-arrow-functions@^6.3.13: version "6.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" @@ -830,6 +861,13 @@ babel-plugin-transform-exponentiation-operator@^6.3.13: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.0.0" +babel-plugin-transform-export-extensions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.0.0" + babel-plugin-transform-flow-strip-types@^6.3.13: version "6.14.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.14.0.tgz#35ceb03f8770934044bab1a76f7e4ee0aa9220f9" @@ -837,6 +875,13 @@ babel-plugin-transform-flow-strip-types@^6.3.13: babel-plugin-syntax-flow "^6.8.0" babel-runtime "^6.0.0" +babel-plugin-transform-function-bind@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.0.0" + babel-plugin-transform-object-rest-spread@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" @@ -893,6 +938,21 @@ babel-plugin-transform-strict-mode@^6.8.0: babel-runtime "^6.0.0" babel-types "^6.8.0" +babel-plugin-webpack-loaders: + version "0.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-webpack-loaders/-/babel-plugin-webpack-loaders-0.8.0.tgz#1ec5255e2c9de8d5226c58a099890d935a876065" + dependencies: + babel-preset-es2015 "^6.3.13" + babel-preset-stage-0 "^6.5.0" + babel-register "^6.4.3" + babel-traverse "^6.3.26" + babel-types "^6.3.24" + babylon "^6.3.26" + colors "^1.1.2" + enhanced-resolve "^2.2.2" + lodash "^4.6.1" + rimraf "^2.5.0" + babel-polyfill@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" @@ -942,7 +1002,23 @@ babel-preset-react@^6.16.0: babel-plugin-transform-react-jsx-self "^6.11.0" babel-plugin-transform-react-jsx-source "^6.3.13" -babel-preset-stage-2@^6.3.13: +babel-preset-stage-0@^6.5.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" + dependencies: + babel-plugin-transform-do-expressions "^6.3.13" + babel-plugin-transform-function-bind "^6.3.13" + babel-preset-stage-1 "^6.16.0" + +babel-preset-stage-1@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" + dependencies: + babel-plugin-transform-class-constructor-call "^6.3.13" + babel-plugin-transform-export-extensions "^6.3.13" + babel-preset-stage-2 "^6.16.0" + +babel-preset-stage-2@^6.16.0, babel-preset-stage-2@^6.3.13: version "6.17.0" resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.17.0.tgz#dc4f84582781353cef36c41247eae5e36c4cae0d" dependencies: @@ -960,7 +1036,7 @@ babel-preset-stage-3@^6.17.0: babel-plugin-transform-exponentiation-operator "^6.3.13" babel-plugin-transform-object-rest-spread "^6.16.0" -babel-register@^6.16.0, babel-register@^6.16.3: +babel-register@^6.16.0, babel-register@^6.16.3, babel-register@^6.4.3: version "6.16.3" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.16.3.tgz#7b0c0ca7bfdeb9188ba4c27e5fcb7599a497c624" dependencies: @@ -990,7 +1066,7 @@ babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-te babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0, babel-traverse@^6.9.0: +babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.3.26, babel-traverse@^6.8.0, babel-traverse@^6.9.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.16.0.tgz#fba85ae1fd4d107de9ce003149cc57f53bef0c4f" dependencies: @@ -1004,7 +1080,7 @@ babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.7.2, babel-types@^6.8.0, babel-types@^6.9.0: +babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.3.24, babel-types@^6.7.2, babel-types@^6.8.0, babel-types@^6.9.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.16.0.tgz#71cca1dbe5337766225c5c193071e8ebcbcffcfe" dependencies: @@ -1013,7 +1089,7 @@ babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.1.0, babylon@^6.11.0, babylon@^6.11.2, babylon@^6.8.1: +babylon@^6.1.0, babylon@^6.11.0, babylon@^6.11.2, babylon@^6.3.26, babylon@^6.8.1: version "6.13.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.0.tgz#58ed40dd2a8120612be5f318c2c0bedbebde4a0b" @@ -1521,7 +1597,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@~1.1.2: +colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -2057,7 +2133,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -enhanced-resolve@^2.2.0: +enhanced-resolve@^2.2.0, enhanced-resolve@^2.2.2: version "2.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-2.3.0.tgz#a115c32504b6302e85a76269d7a57ccdd962e359" dependencies: @@ -5281,7 +5357,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4, rimraf@~2.5.0, rimraf@~2.5.1, rimraf@2: +rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.5.4, rimraf@~2.5.0, rimraf@~2.5.1, rimraf@2: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: