2017-06-11 22 views
1

私はリアクションのビルドツールでリアクションアプリを構築しようとしています。React BuilderツールでパブリックURLが正しく設定されない

npm run build 

ビルドフォルダでindex.htmlファイルを開くと、空白のページ以外は表示されません。これは、反応ビルダーがスクリプトとCSSのパスを間違って設定するためです。

index.htmlを

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"> 
<meta name="theme-color" content="#000000"> 
<link rel="manifest" href="/manifest.json"> 
<link rel="shortcut icon" href="/favicon.ico"> 
<title>React App</title> 
<style> 
</style> 
<link href="/static/css/main.5fa823c3.css" rel="stylesheet"> 
</head> 
<body><noscript>You need to enable JavaScript to run this app.</noscript> 
<div id="root"></div> 
<script type="text/javascript" src="/static/js/main.09bdcb2b.js"></script> 
</body> 
</html> 

あなたが見ることができるように、スラッシュはすべてのファイルパスの前にあります。これを手作業で修正すると、スクリプトは機能しますが、process.env.PUBLIC_URLの値がnullであるため、ブラウザは "service-worker.js"ファイルを見つけることができません。 (サービスworker.jsが正しい場所に存在する)

enter image description here

export default function register() { 
    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 
    window.addEventListener('load',() => { 
     console.log("URL: "+process.env.PUBLIC_URL) //THIS IS NULL 
     const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 
     navigator.serviceWorker 
     .register(swUrl) 
     .then(registration => { 
      registration.onupdatefound =() => { 
      const installingWorker = registration.installing; 
      installingWorker.onstatechange =() => { 
       if (installingWorker.state === 'installed') { 
       if (navigator.serviceWorker.controller) { 
        // At this point, the old content will have been purged and 
        // the fresh content will have been added to the cache. 
        // It's the perfect time to display a "New content is 
        // available; please refresh." message in your web app. 
        console.log('New content is available; please refresh.'); 
       } else { 
        // At this point, everything has been precached. 
        // It's the perfect time to display a 
        // "Content is cached for offline use." message. 
        console.log('Content is cached for offline use.'); 
       } 
       } 
      }; 
      }; 
     }) 
     .catch(error => { 
      console.error('Error during service worker registration:', error); 
     }); 
    }); 
    } 
} 

export function unregister() { 
    if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.ready.then(registration => { 
     registration.unregister(); 
    }); 
    } 
} 

基本的に、それは公共のURLを設定することはできません。

どうすればこの問題を解決できますか?どこでもこの問題に関する情報はほとんどありません。

+0

どのビルドツールを参照していますか? CreateReactAppのスクリプトを意味しますか?そうでない場合は、比較するものが必要な場合は、そこからボックスを外してbuildを実行します。 – sinewave440hz

答えて

2

package.jsonファイルに「ホームページ」を設定する必要があります。プロジェクトがサーバーの作業ディレクトリのルートにある "project"という名前のフォルダにあるとします。

{ 
    "name": "app name", 
    "homepage": "/project", 
} 
関連する問題