実稼働環境 (Ubuntu 14.04.3 LTS) に nam とノードをインストールし、gem react-on-rails を使用して Redux / ReactJS を実装する Rails アプリをデプロイしようとしています。開発環境では問題なく動作していますが、ここで壁にぶつかっているように感じます。
npm run build:production ("build:production": "NODE_ENV=production webpack --config webpack.config.js") を実行すると問題が発生します。
展開中のログは次のとおりです。
NODE_ENV=production webpack --config webpack.config.js
sh: 1: webpack: not found
npm ERR! Linux 3.13.0-48-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "build:production"
npm ERR! node v4.6.0
npm ERR! npm v2.15.9
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! react-webpack-rails-tutorial@0.0.1 build:production: `NODE_ENV=production webpack --config webpack.config.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the react-webpack-rails-tutorial@0.0.1 build:production script 'NODE_ENV=production webpack --config webpack.config.js'
webpack.config.js ファイルは次のとおりです。
const webpack = require('webpack');
const path = require('path');
const devBuild = process.env.NODE_ENV !== 'production';
const nodeEnv = devBuild ? 'development' : 'production';
const config = {
entry: [
'es5-shim/es5-shim',
'es5-shim/es5-sham',
'babel-polyfill',
'./app/bundles/Chat/startup/ChatApp'
],
output: {
filename: 'webpack-bundle.js',
path: '../app/assets/webpack',
},
resolve: {
extensions: ['', '.js', '.jsx'],
alias: {
react: path.resolve('./node_modules/react'),
'react-dom': path.resolve('./node_modules/react-dom'),
},
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(nodeEnv),
},
}),
],
module: {
loaders: [
{
test: require.resolve('react'),
loader: 'imports?shim=es5-shim/es5-shim&sham=es5-shim/es5-sham',
},
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
],
},
};
module.exports = config;
if (devBuild) {
console.log('Webpack dev build for Rails'); // eslint-disable-line no-console
module.exports.devtool = 'eval-source-map';
} else {
config.plugins.push(
new webpack.optimize.DedupePlugin()
);
console.log('Webpack production build for Rails'); // eslint-disable-line no-console
}
私のpackage.jsonで更新
{
"name": "react-webpack-rails-tutorial",
"version": "0.0.1",
"engines": {
"node": "5.10.0",
"npm": "3.5.0"
},
"scripts": {
"build:test": "webpack --config webpack.config.js",
"build:production": "NODE_ENV=production webpack --config webpack.config.js",
"build:development": "webpack -w --config webpack.config.js"
},
"cacheDirectories": ["node_modules", "client/node_modules"],
"dependencies": {
"babel": "^6.5.2",
"babel-cli": "^6.6.5",
"babel-core": "^6.7.4",
"babel-loader": "^6.2.4",
"babel-runtime": "^6.6.1",
"babel-polyfill": "^6.7.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-0": "^6.5.0",
"es5-shim": "^4.5.7",
"expose-loader": "^0.7.1",
"immutable": "^3.7.6",
"imports-loader": "^0.6.5",
"mirror-creator": "1.1.0",
"react": "^0.14.8 || ^15.0.0",
"react-dom": "^0.14.8 || ^15.0.0",
"react-on-rails": "6.1.1",
"react-redux": "^4.4.1",
"redux": "^3.3.1",
"redux-promise": "^0.5.3",
"redux-thunk": "^2.0.1",
"webpack": "^1.12.14"
},
"devDependencies": {
}
}
何が間違っているのか、何か考えはありますか?実稼働環境でノード v4.6.0 を使用していることに気付きましたが、レールに反応するには少なくともノード 5 が必要です。おそらく私の問題はそこにあります..
Rails プロジェクトの app/assets フォルダーの下に web pack-bundle.js ファイルがあります。したがって、ファイルは欠落していません