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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

3回答

3008閲覧

isomorphic-webpackでSSRをしたいが「Error: DllPlugin: supply an Array as entry」

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2017/07/02 06:48

編集2017/07/02 06:50

NodeJSサーバで、webpackで制作したReactJSをSSRしたいです。
複数のloaderを使用してコンパイルをしているため、webpackのコンパイル環境を生かしたままサーバへあげたいです。設定を実行すると、DllPlugin.jsからエラーが発生し、解決方法が分からず躓いています。ご教授頂けますと幸いです。

javascript

1// server.js 2import React from 'react' 3import ReactDom from 'react-dom' 4import express from 'express' 5import webpackConfiguration from '../webpack.config' 6import webpackDevMiddleware from 'webpack-dev-middleware' 7import webpack from 'webpack' 8import {renderToString} from 'react-dom/server' 9import {createIsomorphicWebpack} from 'isomorphic-webpack' 10 11const app = express() 12 13const compiler = webpack(webpackConfiguration) 14createIsomorphicWebpack(webpackConfiguration) 15 16const webpackDevMiddlewareInstance = app.use(webpackDevMiddleware(compiler)) 17 18const renderFullPage = (body) => { 19 return `<!doctype html> 20 <html lang="ja"> 21 <head> 22 </head> 23 <body> 24 <div id="root"></div> 25 ${body} 26 <script src="/assets/js/bundle.js"></script> 27 </body> 28 </html>` 29} 30 31app 32 .get('*', function (req, res) { 33 const appBody = renderToString(require(`../src/index.js`).default) 34 res.setHeader('content-type', 'text/html') 35 res 36 .status(200) 37 .send(renderFullPage(appBody)) 38 }) 39 40app.listen(3000)

javascript

1 // webpack.config.js 2const path = require('path'); 3const webpack = require('webpack'); 4 5module.exports = { 6 entry: path.resolve(__dirname, 'src/index.js'), 7 output: { 8 path: path.resolve(__dirname, 'public/assets/js/'), 9 filename: 'bundle.js' 10 }, 11 module: { 12 rules: [ 13 { 14 test: /\.js$/, 15 exclude: /node_modules/, 16 loader: 'babel-loader', 17 options: { 18 presets: ["es2015", "react"] 19 } 20 }, { 21 test: /\.(css|scss)$/, 22 loaders: [ 23 'style-loader', 'css-loader?modules&localIdentName=[path]___[name]__[local]___[hash:base64:5]!sas' + 24 's-loader?modules', 25 'autoprefixer-loader' 26 ] 27 }, { 28 test: /\.(jpg|png|svg)$/, 29 loaders: 'url-loader' 30 } 31 ] 32 } 33}

shell

1$ babel-node server.js 2/Users/XXX/node_modules/webpack/lib/DllPlugin.js:22 3 throw new Error("DllPlugin: supply an Array as entry"); 4Error: DllPlugin: supply an Array as entry

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

skagawaさんと同じ回答になってしまいますが、

DllPluginの対象箇所は以下の通りとなっていて、Array.isArray(item)のときにDLLEntryPluginのインスタンスを返すようになっています。

js

1function itemToPlugin(item, name) { 2 if(Array.isArray(item)) 3 return new DllEntryPlugin(context, item, name); 4 else 5 throw new Error("DllPlugin: supply an Array as entry"); 6}

また、DLLEntryPluginのほうもインスタンス変数として渡ってきたentriesを配列の用に扱っています。

js

1class DllEntryPlugin { 2 constructor(context, entries, name) { 3 this.context = context; 4 this.entries = entries; //配列で来たと予想して 5 this.name = name; 6 } 7 //... 8 //this.entriesに対してmapとかしてる 9 compilation.addEntry(this.context, new DllEntryDependency(this.entries.map((e, idx) => {//...}

なので、entryの部分をentry: [path.resolve(__dirname, 'src/index.js')],のようにして見てほしいです。

ちなみに、webpack自体のentry部分は、StringでもArrayでもHash(key, valueのやつ)でも問題なく動きます。
その為最初僕も意味不明だと思っていたのですが、DllPluginの方ではentryは配列で来ることを予想されていたので、DllPluginを使用する際は配列に限定されてしまうのかもしれないですね。。。

見当違いでしたらスイマセン!

投稿2017/07/11 16:40

MasakazuFukami

総合スコア1869

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

本家の、https://github.com/gajus/isomorphic-webpackをcloneしてReadmeの手順通りの実行しましたが、デフォルトでERRORを吐いていました。(nodeのバージョン調整するも変わらず。)

本家をcloneして初期でERRORなのは致命的なので、別の方法を検討します。
ご回答ありがとうございます・・

投稿2017/07/10 13:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

webpack のことはよくわからないのですが・・・。

エラーメッセージを見る限り entry が配列でないというエラーのようです。 entry: [path.resolve(__dirname, 'src/index.js')], という感じで配列にしてみてはいかがでしょう?

しかし webpack.config.js には DllPlugin の記述がないのに不思議ですね・・・と思ったら isomorphic-webpack が入れているようです。

投稿2017/07/09 11:04

編集2017/07/09 11:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問