2017-02-01 1 views
1

私が英雄にプッシュするたびに、単に「見つからない」と表示されます。私はそれがwebpackが実行されないためだと仮定していますか?ヘロクのWepbackで構築されたプロダクションリアクションアプリをホスト

私は、スクリプトのすべての種類を試してみた:

"scripts": { 
    "clean": "rimraf dist", 
    "build": "npm run clean && NODE_ENV=production && webpack -p --progress", 
    "postinstall": "npm run builds", 
    "serve": "webpack-dev-server" 
} 

と別のものを、単にインストール後なし。

postinstallがインストールされていると、webpackがインストールされていない(devDependenciesの下に保存されている)というエラーが表示されます。 2番目のページでは、Herokuのログに成功したビルドを取得しますが、ページをロードすると「見つからない」と表示されます。

答えて

4

"devDependencies"ではなく、webpack(およびHerokuに必要なその他の依存関係)をpackage.jsonの "dependencies"に入れる必要があります。

+0

これは私が想像したものですが、多くの人がdevDependenciesの下に置いているのを見ています。なぜそれが分かっていますか? – user2465134

+0

Herokuはプロダクション環境です。 devDependenciesは、開発環境でのみ必要なパッケージ用です。 Herokuスラッグに含める必要があるパッケージ(webpackなどのスラッグ構築フェーズで必要なパッケージを含む)は、devDependenciesではなく依存関係にある必要があります。 Webpackを他のプラットフォームのdevDependenciesに入れている人がいるかもしれませんが、おそらくHerokuではありません。 –

+2

しかし、あなたのdevDependenciesをHerokuにインストールすることは本当に強く(推奨しません)、ここで説明しているようにNPM_CONFIG_PRODUCTION = falseを設定するとできます:https://devcenter.heroku.com/articles/nodejs-support#devdependencies –

2

これを処理するより良い方法は、あなたのpackage.jsonをきれいに保つことだと思うし、Herokuは物を作るのが難しくなるので、その特定のケースを処理するだけです。

私たちはあなたの package.jsonのスクリプトセクションから

など、クリーンアップ、これらのタスクの負荷のdevの依存関係、ビルドタスクを実行するためにNPMのインストール後のフックを使用し

"scripts": { 
    "postinstall": "node ./ops/heroku-build.js" 
} 

そしてheroku-build.js

'use strict'; 

if ('HEROKU' in process.env || ('DYNO' in process.env && process.env.HOME === '/app')){ 

    const pkg = require('../package.json'); 
    const ChildProcess = require('child_process'); 


    let deps = pkg.devDependencies; 
    let packages = ""; 

    Object.keys(deps).forEach((key) => { 
    packages += `${key}@${deps[key]} `; // note space at end to separate entries 
    }); 

    try { 
    console.time("install"); 
    console.log("starting npm install of dev dependencies"); 
    ChildProcess.execSync(`npm install ${packages}`); 
    console.timeEnd("install"); 

    console.time("build"); 
    console.log("starting npm build"); 
    ChildProcess.execSync(`npm run build:all`); 
    console.timeEnd("build"); 

    console.time("uninstall"); 
    console.log("starting npm uninstall of dev dependencies"); 
    ChildProcess.execSync(`npm uninstall ${packages}`); 
    console.timeEnd("uninstall"); 
    } 
    catch (err) { 
    console.error(err.message); 
    } 
} else { 
    console.log("Not Heroku, skipping postinstall build"); 
} 

このようにAWSや他の場所に展開することに決めた場合、その環境の特質を扱うことができます個別にnt。

Heroku documentation on how to customize the build process

+1

ヘロクで最初のアプリを手に入れようとしている人にとってはちょっと複雑ですが、ニース! –

+0

それは本当だと思います。しかし、あなたがHerokuの道を始めるときに、これらのことをどのように処理するかについて何らかのアイデアを持っていることは決して痛いことではありません!全体的に、私はHerokuの構築段階を理解するだけでいいと思う。 –

+1

あなたはスクリプトなしでそれを行うことができます。私は 'package.json'を解析して手動でnpmの作業を行うのは脆弱であり、価値がないことが分かりました。 –

関連する問題