質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

react+typescript+webpackをnginxで動かしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,139

yaeyama

score 55

 前提・実現したいこと

create-react-app


のtsのオプションみたいなやつ(忘れた)で作成した段階で

npm run build


を実行し、

# Dockerfile
FROM nginx:1.15.2
#docker-compose.yml
version: "2"

services:
  nginx:
    build: .
    ports:
      - 32000:80
    volumes:
      - ./build:/usr/share/nginx/html


docker-compose up


で32000アクセスでは動作しました。
その後webpackもろもろ入れ、webpack --watchは動くのですが、index.htmlが生成されないので当然403です。
ついでにnpm run buildも通らなくなりました。

今自分はwebpackのオプションかなにかでindex.htmlを生成すればいいと考えていますが、その方法がわからず、
そもそもそれが正しい解決策なのかも疑問です。
どう対処するのが適切でしょうか?

 ソース

package.json

{
  "name": "xxx",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.4.2",
    "react-dom": "^16.4.2",
    "react-scripts-ts": "2.17.0"
  },
  "scripts": {
    "start": "react-scripts-ts start",
    "build": "react-scripts-ts build",
    "test": "react-scripts-ts test --env=jsdom",
    "eject": "react-scripts-ts eject",
    "wp": "webpack",
    "watch": "webpack --watch",
    "lint": "tslint 'src/**/*.ts{,x}'"
  },
  "devDependencies": {
    "@types/jest": "^23.3.1",
    "@types/node": "^10.9.2",
    "@types/react": "^16.4.11",
    "@types/react-dom": "^16.0.7",
    "awesome-typescript-loader": "^5.2.0",
    "css-loader": "^1.0.0",
    "file-loader": "^2.0.0",
    "html-webpack-plugin": "^3.2.0",
    "prettier": "^1.14.2",
    "source-map-loader": "^0.2.4",
    "tslint": "^5.11.0",
    "tslint-config-prettier": "^1.15.0",
    "tslint-plugin-prettier": "^1.3.0",
    "typescript": "^3.0.1",
    "webpack": "^4.17.1",
    "webpack-cli": "^3.1.0"
  }
}

webpack.config.js

module.exports = {
  entry: "./src/index.tsx",
  output: {
    filename: "bundle.js",
    path: __dirname + "/dist"
  },

  // Enable sourcemaps for debugging webpack's output.
  devtool: "source-map",

  resolve: {
    // Add '.ts' and '.tsx' as resolvable extensions.
    extensions: [".ts", ".tsx", ".js", ".json"]
  },

  module: {
    rules: [
      // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
      { test: /\.tsx?$/, loader: "awesome-typescript-loader" },
      { test: /\.css?$/, loader: "css-loader" },
      { test: /\.(jpg|png|svg)?$/, loader: "file-loader" },
      // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
      { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
    ]
  },

};

tsconfig.json

{
  "compilerOptions": {
    "baseUrl": ".",
    "outDir": "./dist",
    "module": "esnext",
    "target": "es5",
    "lib": ["es6", "dom"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true
  },
  "exclude": [
    "node_modules",
    "build",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts"
  ]
}

npm run buildのエラー

D:\xxx\node_modules\webpack\lib\Chunk.js:829
                throw new Error("Chunk.entrypoints: Use Chunks.addGroup instead");
                ^

Error: Chunk.entrypoints: Use Chunks.addGroup instead
    at Chunk.set (D:\xxx\node_modules\webpack\lib\Chunk.js:829:9)
    at D:\xxx\node_modules\extract-text-webpack-plugin\dist\index.js:176:40
    at Array.forEach (<anonymous>)
    at Compilation.<anonymous> (D:\xxx\node_modules\extract-text-webpack-plugin\dist\index.js:171:18)
    at Compilation.applyPluginsAsyncSeries (D:\xxx\node_modules\tapable\lib\Tapable.js:206:13)
    at Compilation.seal (D:\xxx\node_modules\react-scripts-ts\node_modules\webpack\lib\Compilation.js:605:8)
    at applyPluginsParallel.err (D:\xxx\node_modules\react-scripts-ts\node_modules\webpack\lib\Compiler.js:508:17)
    at D:\xxx\node_modules\tapable\lib\Tapable.js:289:11
    at _addModuleChain (D:\xxx\node_modules\react-scripts-ts\node_modules\webpack\lib\Compilation.js:507:11)
    at processModuleDependencies.err (D:\xxx\node_modules\react-scripts-ts\node_modules\webpack\lib\Compilation.js:477:14)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! xxx@0.1.0 build: `react-scripts-ts build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the ts_react@0.1.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\xxx\AppData\Roaming\npm-cache\_logs\2018-08-26T09_33_44_093Z-debug.log

 補足情報(FW/ツールのバージョンなど)

windows 10
docker toolbox(多分最新版)
npm 5.6.0

生成されたtypescriptファイルは一切いじっていません
Docker使ってるけど結局ローカルでnpm run watchしないといけないからdockerあんま意味なくね?みたいなのはとりあえず置いといてください

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

npm run buildに関しては
https://github.com/webpack-contrib/extract-text-webpack-plugin
で解決しました

対応として、

  1. 初めに一回npm run build
  2. npm run watch
  3. 生成されたindex.htmlをwebpackで生成されたjsを読み込むように変更
  4. 以降はnpm run watchのみで辺国が反映される

としました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる