Webpack-dev-server cung cấp danh sách thư mục thay vì trang ứng dụng


91

nhập mô tả hình ảnh ở đây

Tôi chỉ có thể thấy ứng dụng thực tế bên dưới /public.

Các cấu hình webpack.config.jsbên dưới:

var path    = require('path');
var webpack = require('webpack');

module.exports = {

  entry: [
    'webpack-dev-server/client?http://localhost:8080',
    'webpack/hot/only-dev-server',
    './app/js/App.js'
],

  output: {
    path: path.join(__dirname, 'public'),
    filename: 'bundle.js',
    publicPath: 'http://localhost:8080'
  },

  module: {
    loaders: [
      {
        test: /\.js$/,
        loaders: ['react-hot', 'babel-loader'],
        exclude: /node_modules/
      }
     ]
   },

  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ]

};

Hệ thống phân cấp dự án là:

  • ứng dụng

    • js
  • node_modules

  • công cộng

    • css

    • img

    bó.js

    index.html

  • package.json

  • webpack.config.js

Làm cách nào tôi có thể sửa đổi để đảm bảo http://localhost:8080/mục nhập là dành cho ứng dụng?

Câu trả lời:


78

Nếu bạn đang sử dụng máy chủ nhà phát triển của webpack, bạn có thể chuyển vào các tùy chọn để sử dụng /publiclàm thư mục cơ sở.

devServer: {
    publicPath: "/",
    contentBase: "./public",
    hot: true
},

Xem tài liệu cấu hình webpack và cụ thể là tài liệu máy chủ webpack dev để biết thêm tùy chọn và thông tin chung.


1
Cảm ơn vì câu trả lời này, tôi đã gỡ rối. Cũng cảm ơn bạn đã đăng các liên kết đến cả hai tài liệu.
Chris Schmitz

3
Còn webpack 2 thì sao? Tôi đã đọc các tài liệu và không thể tự mình tìm ra nó.
mayyiam

@mightyiam bạn cũng sẽ muốn đặt thuộc tính publicPath. Tôi sẽ cập nhật câu trả lời để bao gồm điều đó.
Sandals

1
Tôi không biết làm thế nào ai đó có thể tìm ra điều này từ tài liệu. Cảm ơn bạn. Có lẽ hãy xem xét việc viết lại một số tài liệu về các thuộc tính đó?
mayyiam

17

Bạn cũng có thể thêm --content-basecờ vào tập lệnh khởi động của mình, ví dụ:

    "scripts": {
        "start:dev": "webpack-dev-server --inline --content-base ./public"
    }

4

Trong trường hợp của tôi, tôi đã viết sai chính tả 'index.html'khi thiết lập HTMLWebpackPlugin. Kiểm tra kỹ tên tệp của bạn nếu bạn đang sử dụng plugin này.

var HTMLWebpackPlugin = require('html-webpack-plugin');
var HTMLWebpackPluginConfig = new HTMLWebpackPlugin({
  template: __dirname + '/app/index.html',
  filename: 'index.html',
  inject: 'body'
});

điều này đã giúp tôi khắc phục sự thật rằng tôi đã nhận được HTML được tạo tự động bằng webpack. Bây giờ, bằng cách thiết lập thông số này, templatetôi có thể chỉ định html của riêng mình mà không có vấn đề gì. Cảm ơn rất nhiều!
danivicario

1

Tôi đã vô tình xóa index.html và sau đó tôi chỉ nhận được danh sách thư mục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.