我只是无法启动此服务器,我阅读了 webpack-dev-server 文档。
devServer: {
contentBase: path.join(__dirname, "dist"),
compress: true,
port: 9000
}
示例代码看起来很简单,但我无法成功启动此服务器,无论我尝试什么,不同的文件夹,它都无法获取 内容!我错过了什么吗?
任何帮助将不胜感激。
输出:
Project is running at http://0.0.0.0:8080/
webpack output is served from /assets/
Content not from webpack is served from ~/WebstormProjects/react_back/assets/
我的项目结构:
├── [drwxr-xr-x ] src
│ └── [-rw-r--r-- ] index.js
├── [drwxr-xr-x ] public
│ ├── [-rw-r--r-- ] index.html
│ ├── [drwxr-xr-x ] assets
│ │ └── [-rw-r--r-- ] bundle.js
│ └── [-rw-r--r-- ] favicon.ico
├── [-rw-r--r-- ] package.json
├── [-rw-r--r-- ] npm-debug.log
├── [-rw-r--r-- ] webpack.config.js
包.json
"scripts": {
"build": "webpack",
"dev": "webpack-dev-server --devtool eval"
},
webpack.config.js
module.exports = {
entry: __dirname + "/src/index.js",
output: {
path: __dirname + "/public",
publicPath: "/assets/",
filename: "assets/bundle.js",
chunkFilename: '[name].js'
},
devServer: {
contentBase: __dirname + "/assets/",
inline: true,
host: '0.0.0.0',
port: 8080,
},
module: {
loaders: [
{
test: /\.(jpg|jpeg|gif|png|ico)$/,
exclude: /node_modules/,
loader: 'file-loader?name=[name].[ext]'
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ["es2016", "react", "env", "stage-2"]
}
}
]
}
};
版本:
➜ node -v
v7.6.0
➜ webpack-dev-server -v
webpack-dev-server 2.4.1
webpack 2.2.1
原文由 McGrady 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一个问题是您从
assets/
提供内容,但您没有该目录,您有public/assets/
这甚至不是您想要的,因为您的index.html
在public/
中。所以你真正想要的是将contentBase
设置为public/
:现在您仍然会
webpack-dev-server
没有提供正确的捆绑包的问题。它可能会起作用,但那是因为您的实际文件系统上有捆绑包,它将被用来代替webpack-dev-server
将从内存中提供的捆绑包。原因是webpack-dev-server
仅在命中正确路径时才从内存中提供服务。假设您在assets/bundle.js
index.html
,这将与路径匹配,但您正在设置publicPath: "/assets/"
,所以它将寻找/assets/
并为其添加文件名(即assets/bundle.js
,实际上该捆绑包是从/assets/assets/bundle.js
提供的。要解决此问题,您可以删除
publicPath
选项(设置publicPath: "/"
具有相同的效果)。或者您可以将输出路径更改为
/public/assets/
并将文件名更改为bundle.js
。这也将使您的块进入资产目录,这可能是您想要的。注意:
publicPath
会影响一些改变资产 URL 的加载器。