-
Notifications
You must be signed in to change notification settings - Fork 759
Using JS components from Rails engines
See a discussion on this topic here https://github.com/rails/webpacker/issues/21.
Follow conventions of rails/webpacker and have your engine export built JS as a NPM module.
To do so, add package.json
in your engine along these lines:
{
"name": "@user/engine",
"version": "1.0.0",
"description": "…",
"main": "package/dist/index.js",
"files": [
"package"
],
"repository": {
"type": "git",
"url": "git+https://github.com/user/engine.git"
},
"author": "…",
"license": "…",
"homepage": "…",
"scripts": {
"build": "webpack"
},
"dependencies": {
"@rails/webpacker": "^3.0.1",
"babel-preset-react": "^6.24.1",
"coffee-loader": "^0.8.0",
"coffeescript": "^2.0.1",
"prop-types": "^15.5.10",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"webpacker-react": "^0.3.2"
},
"devDependencies": {
"babel-preset-env": "^1.6.0",
"babel-preset-es2015": "^6.24.1",
"webpack-dev-server": "^2.8.2"
}
}
Configure webpack using webpack.config.js
. (The configuration below processes CoffeeScript files, however it can be easily adjusted for .jsx
etc.)
const path = require('path');
const webpack = require('webpack')
module.exports = {
module: {
rules: [
{
test: /\.coffee$/,
use: ['babel-loader', 'coffee-loader']
}
]
},
entry: './package/src/index.js',
output: {
library: '@user/engine',
libraryTarget: 'umd',
umdNamedDefine: true,
filename: 'index.js',
path: path.resolve(__dirname, 'package/dist')
},
resolve: {
extensions: ['.coffee', '.js']
}
};
This configuration assumes source code under package/src
, however feel free to adjust the location as necessary. Similarly, the compiled JS will be stored in package/dist
as index.js
entrypoint.
Build the components using yarn build
.
If open source, you can publish the package via NPM and yarn add
it to your main app. Alternatively you can simply store the built JS in the GitHub repo and yarn add
the package from the repo in your main app.
In development, it is possible to use combination of yarn link
and yarn build --watch
to have the engine's JS code automatically rebuilt on updated and changes visible in your main app.