Hi,
I recently upgraded to express-react-views 0.0.10 and got into production issues when trying to deploy.
I have a setup with a client-side react app which is not rendered server-side and then also one react component which is rendered on the server using express-react-views.
When I did the upgrade everything went smooth locally but on the server with NODE_ENV=production
I encountered the following issue:
Error: Couldn't find preset "es2015" relative to directory "/path/to/code/server/views"
at /path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:405:17
at Array.map (native)
at OptionManager.resolvePresets (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:397:20)
at OptionManager.mergePresets (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:381:10)
at OptionManager.mergeOptions (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:340:14)
at OptionManager.init (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:498:10)
at compile (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:81:45)
at loader (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:126:14)
at Object.require.extensions.(anonymous function) [as .jsx] (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:136:7)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at View.renderFile [as engine] (/path/to/code/node_modules/express-react-views/index.js:50:23)
at View.render (/path/to/code/node_modules/express/lib/view.js:126:8)
at tryRender (/path/to/code/node_modules/express/lib/application.js:639:10)
at EventEmitter.render (/path/to/code/node_modules/express/lib/application.js:591:3)
at ServerResponse.render (/path/to/code/node_modules/express/lib/response.js:961:7)
at discountsFragment (/path/to/code/server/routes/discounts.js:29:23)
at tryCatcher (/path/to/code/node_modules/request-promise/node_modules/bluebird/js/main/util.js:26:23)
at Promise._settlePromiseFromHandler (/path/to/code/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:507:31)
at Promise._settlePromiseAt (/path/to/code/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:581:18)
Trying locally with the following steps:
package.json includes among express also express-react-views in the dependencies.
devDependencies are, among other things:
"babel-core": "^6.6.0",
"babel-eslint": "^5.0.0",
"babel-loader": "^6.2.4",
"babel-plugin-react-transform": "^2.0.0",
"babel-plugin-transform-react-display-name": "^6.5.0",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-runtime": "^6.6.1",
run NODE_ENV=production npm install
followed by NODE_ENV=production npm prune
.
Then run the server using NODE_ENV=production npm start
.
Now accessing the route which should render the JSX view I get the error above.
I tinkered around a bit, and tried moving babel-preset-es2015
from the devDependencies to the dependencies. This yielded another error:
ReferenceError: [BABEL] /path/to/code/server/views/some-view.jsx: Unknown option: base.Children. Check out http://babeljs.io/docs/usage/options/ for more info
at Logger.error (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/logger.js:41:11)
at OptionManager.mergeOptions (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:300:20)
at OptionManager.init (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/options/option-manager.js:498:10)
at File.initOptions (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/index.js:206:75)
at new File (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/index.js:124:22)
at Pipeline.transform (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/transformation/pipeline.js:44:16)
at Object.transformFileSync (/path/to/code/node_modules/express-react-views/node_modules/babel-register/node_modules/babel-core/lib/api/node.js:124:10)
at compile (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:98:20)
at loader (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:126:14)
at Object.require.extensions.(anonymous function) [as .jsx] (/path/to/code/node_modules/express-react-views/node_modules/babel-register/lib/node.js:136:7)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at View.renderFile [as engine] (/path/to/code/node_modules/express-react-views/index.js:50:23)
at View.render (/path/to/code/node_modules/express/lib/view.js:126:8)
at tryRender (/path/to/code/node_modules/express/lib/application.js:639:10)
at EventEmitter.render (/path/to/code/node_modules/express/lib/application.js:591:3)
at ServerResponse.render (/path/to/code/node_modules/express/lib/response.js:961:7)
at discountsFragment (/path/to/code/server/routes/discounts.js:29:23)
at tryCatcher (/path/to/code/node_modules/request-promise/node_modules/bluebird/js/main/util.js:26:23)
at Promise._settlePromiseFromHandler (/path/to/code/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:507:31)
After also moving babel-preset-react
from the devDependencies to the dependencies it seems to work now (locally at least, deployment to production is in progress).
I wonder whether I did something wrong or this is something which should be stated in the README?
If my steps to reproduce are unclear, I'll try to create a small repo which shows the issue.