在 Webpack2 中获取 Webpack-Dev-Server 运行
Get Webpack-Dev-Server Running in Webpack2
我似乎无法让 webpack2 的 webpack-dev-server 工作。
我使用的版本:
webpack@2.1.0-beta.25
& webpack-dev-server@2.1.0-beta.10
我收到以下 CLI 日志:
http://localhost:8080/
webpack result is served from /
content is served from /var/www/homelyfe/hl-app/app/index.js
Hash: 2830dae8362c968c034c
Version: webpack 2.1.0-beta.25
Time: 544ms
Asset Size Chunks Chunk Names
run.build.js 47.6 kB 0 [emitted] app
index.html 198 bytes [emitted]
chunk {0} run.build.js (app) 43.4 kB [entry] [rendered]
[0] ./app/index.js 69 bytes {0} [built]
[1] (webpack)-dev-server/client?http://localhost:8080 4.14 kB {0} [built]
[2] ./~/punycode/punycode.js 14.7 kB {0} [built]
[3] ./~/querystring-es3/index.js 127 bytes {0} [built]
[4] ./~/url/url.js 23.3 kB {0} [built]
[5] (webpack)/buildin/global.js 506 bytes {0} [built]
[6] (webpack)/buildin/module.js 548 bytes {0} [built]
[7] multi app 40 bytes {0} [built]
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve './socket' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 4:13-32
@ multi app
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve 'strip-ansi' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 3:16-37
@ multi app
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve 'webpack/hot/emitter' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 124:19-49
@ multi app
ERROR in ./~/url/url.js
Module not found: Error: Can't resolve './util' in '/var/www/homelyfe/hl-app/node_modules/url'
@ ./~/url/url.js 25:11-28
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
ERROR in ./~/querystring-es3/index.js
Module not found: Error: Can't resolve './decode' in '/var/www/homelyfe/hl-app/node_modules/querystring-es3'
@ ./~/querystring-es3/index.js 3:33-52
@ ./~/url/url.js
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
ERROR in ./~/querystring-es3/index.js
Module not found: Error: Can't resolve './encode' in '/var/www/homelyfe/hl-app/node_modules/querystring-es3'
@ ./~/querystring-es3/index.js 4:37-56
@ ./~/url/url.js
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
Child html-webpack-plugin for "index.html":
chunk {0} index.html 539 kB [entry] [rendered]
[0] ./~/lodash/lodash.js 537 kB {0} [built]
[1] (webpack)/buildin/global.js 506 bytes {0} [built]
[2] (webpack)/buildin/module.js 548 bytes {0} [built]
[3] ./~/html-webpack-plugin/lib/loader.js!./~/html-webpack-plugin/default_index.ejs 540 bytes {0} [built]
webpack: bundle is now VALID.
我的 webpack.config.js
文件如下所示:
const path = require( "path" );
const merge = require( "merge" );
const htmlWebpackPlugin = require( "html-webpack-plugin" );
const parts = require( "./webpack.config.parts" );
const PATHS = {
app : path.join( __dirname, "app" ),
build : path.join( __dirname, "build" )
};
const common = {
entry : {
app : PATHS.app + "/index.js"
},
output : {
filename : "run.build.js",
path : PATHS.build
},
resolve : {
alias : {
components : path.resolve( __dirname, "app/components" )
},
extensions : [ "js", "jsx" ]
},
devServer : {
contentBase : PATHS.app
},
module : {
rules : [
{
test : "/\.jsx?$/",
use : [
{
loader : "babel-loader",
options : {
presets : [
"react",
"es2015"
]
}
}
]
}
]
},
plugins : [
new htmlWebpackPlugin({
title : "!!! testing webpack2 !!!"
})
]
};
var config;
switch( process.env.npm_lifecycle_event ){
case( "buildProd" ):
config = merge( common,
{} );
case( "startDev" ):
default:
config = merge( common,
{
devServer : {
contentBase : PATHS.app
}
});
}
module.exports = config;
我错过了什么?
解决方案是将 --no-inline
选项传递给 package.json
中的脚本。因此,在 package.json
中,scripts
obj 将是:
"scripts" : {
"startDev" : "webpack-dev-server --no-inline"
}
https://webpack.js.org/configuration/dev-server/#devserver-inline-cli-only
真正的问题是 resolve
(webpack 配置)中的 extensions
键设置错误。
错误
extensions : [ "js", "jsx" ]
正确
extensions : [ ".js", ".jsx" ]
检查
https://github.com/webpack/webpack-dev-server/issues/720 or https://webpack.js.org/configuration/resolve/
我使用的是不同的设置,但遇到了同样的错误(几乎)。
我认为 --no-inline
只是一种解决方法。
我似乎无法让 webpack2 的 webpack-dev-server 工作。
我使用的版本:
webpack@2.1.0-beta.25
& webpack-dev-server@2.1.0-beta.10
我收到以下 CLI 日志:
http://localhost:8080/
webpack result is served from /
content is served from /var/www/homelyfe/hl-app/app/index.js
Hash: 2830dae8362c968c034c
Version: webpack 2.1.0-beta.25
Time: 544ms
Asset Size Chunks Chunk Names
run.build.js 47.6 kB 0 [emitted] app
index.html 198 bytes [emitted]
chunk {0} run.build.js (app) 43.4 kB [entry] [rendered]
[0] ./app/index.js 69 bytes {0} [built]
[1] (webpack)-dev-server/client?http://localhost:8080 4.14 kB {0} [built]
[2] ./~/punycode/punycode.js 14.7 kB {0} [built]
[3] ./~/querystring-es3/index.js 127 bytes {0} [built]
[4] ./~/url/url.js 23.3 kB {0} [built]
[5] (webpack)/buildin/global.js 506 bytes {0} [built]
[6] (webpack)/buildin/module.js 548 bytes {0} [built]
[7] multi app 40 bytes {0} [built]
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve './socket' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 4:13-32
@ multi app
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve 'strip-ansi' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 3:16-37
@ multi app
ERROR in (webpack)-dev-server/client?http://localhost:8080
Module not found: Error: Can't resolve 'webpack/hot/emitter' in '/var/www/homelyfe/hl-app/node_modules/webpack-dev-server/client'
@ (webpack)-dev-server/client?http://localhost:8080 124:19-49
@ multi app
ERROR in ./~/url/url.js
Module not found: Error: Can't resolve './util' in '/var/www/homelyfe/hl-app/node_modules/url'
@ ./~/url/url.js 25:11-28
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
ERROR in ./~/querystring-es3/index.js
Module not found: Error: Can't resolve './decode' in '/var/www/homelyfe/hl-app/node_modules/querystring-es3'
@ ./~/querystring-es3/index.js 3:33-52
@ ./~/url/url.js
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
ERROR in ./~/querystring-es3/index.js
Module not found: Error: Can't resolve './encode' in '/var/www/homelyfe/hl-app/node_modules/querystring-es3'
@ ./~/querystring-es3/index.js 4:37-56
@ ./~/url/url.js
@ (webpack)-dev-server/client?http://localhost:8080
@ multi app
Child html-webpack-plugin for "index.html":
chunk {0} index.html 539 kB [entry] [rendered]
[0] ./~/lodash/lodash.js 537 kB {0} [built]
[1] (webpack)/buildin/global.js 506 bytes {0} [built]
[2] (webpack)/buildin/module.js 548 bytes {0} [built]
[3] ./~/html-webpack-plugin/lib/loader.js!./~/html-webpack-plugin/default_index.ejs 540 bytes {0} [built]
webpack: bundle is now VALID.
我的 webpack.config.js
文件如下所示:
const path = require( "path" );
const merge = require( "merge" );
const htmlWebpackPlugin = require( "html-webpack-plugin" );
const parts = require( "./webpack.config.parts" );
const PATHS = {
app : path.join( __dirname, "app" ),
build : path.join( __dirname, "build" )
};
const common = {
entry : {
app : PATHS.app + "/index.js"
},
output : {
filename : "run.build.js",
path : PATHS.build
},
resolve : {
alias : {
components : path.resolve( __dirname, "app/components" )
},
extensions : [ "js", "jsx" ]
},
devServer : {
contentBase : PATHS.app
},
module : {
rules : [
{
test : "/\.jsx?$/",
use : [
{
loader : "babel-loader",
options : {
presets : [
"react",
"es2015"
]
}
}
]
}
]
},
plugins : [
new htmlWebpackPlugin({
title : "!!! testing webpack2 !!!"
})
]
};
var config;
switch( process.env.npm_lifecycle_event ){
case( "buildProd" ):
config = merge( common,
{} );
case( "startDev" ):
default:
config = merge( common,
{
devServer : {
contentBase : PATHS.app
}
});
}
module.exports = config;
我错过了什么?
解决方案是将 --no-inline
选项传递给 package.json
中的脚本。因此,在 package.json
中,scripts
obj 将是:
"scripts" : {
"startDev" : "webpack-dev-server --no-inline"
}
https://webpack.js.org/configuration/dev-server/#devserver-inline-cli-only
真正的问题是 resolve
(webpack 配置)中的 extensions
键设置错误。
错误
extensions : [ "js", "jsx" ]
正确
extensions : [ ".js", ".jsx" ]
检查 https://github.com/webpack/webpack-dev-server/issues/720 or https://webpack.js.org/configuration/resolve/
我使用的是不同的设置,但遇到了同样的错误(几乎)。
我认为 --no-inline
只是一种解决方法。