Webpack-dev-server ให้บริการรายการไดเร็กทอรีแทนหน้าแอพ


93

ป้อนคำอธิบายภาพที่นี่

/publicฉันเท่านั้นที่สามารถดูแอปที่เกิดขึ้นจริงภายใต้

การกำหนดค่าwebpack.config.jsอยู่ด้านล่าง:

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()
  ]

};

ลำดับชั้นของโครงการคือ:

  • แอป

    • js
  • node_modules

  • สาธารณะ

    • css

    • img

    มัด js

    index.html

  • package.json

  • webpack.config.js

ฉันจะแก้ไขเพื่อให้แน่ใจว่าhttp://localhost:8080/รายการนั้นมีไว้สำหรับแอปพลิเคชันต่อ se ได้อย่างไร?

คำตอบ:


79

หากคุณใช้เซิร์ฟเวอร์ dev ของ webpack คุณสามารถส่งผ่านตัวเลือกเพื่อใช้/publicเป็นไดเร็กทอรีฐานได้

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

ดูเอกสารการกำหนดค่า webpackและโดยเฉพาะเอกสารเซิร์ฟเวอร์ webpack devสำหรับตัวเลือกเพิ่มเติมและข้อมูลทั่วไป


1
ขอบคุณสำหรับคำตอบนี้ทำให้ฉันไม่ติดขัด ขอขอบคุณที่โพสต์ลิงก์ไปยังเอกสารทั้งสอง
Chris Schmitz

3
แล้ว Webpack 2 ล่ะ? ฉันอ่านเอกสารและคิดไม่ออกเอง
mightyiam

@mightyiam คุณจะต้องการตั้งค่าคุณสมบัติ publicPath ด้วย ฉันจะอัปเดตเพื่อตอบรวมถึงสิ่งนั้น
รองเท้าแตะ

1
ฉันไม่รู้ว่าใครจะคิดออกจากเอกสารนี้ได้อย่างไร ขอบคุณ. อาจพิจารณาเขียนเอกสารเกี่ยวกับคุณสมบัติเหล่านั้นใหม่หรือไม่
mightyiam

17

คุณยังสามารถเพิ่ม--content-baseแฟล็กในสคริปต์เริ่มต้นของคุณได้เช่น

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

4

ในกรณีของฉันฉันสะกดผิด'index.html'เมื่อตั้งค่าไฟล์HTMLWebpackPlugin. ตรวจสอบชื่อไฟล์ของคุณอีกครั้งหากคุณกำลังใช้ปลั๊กอินนี้

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

สิ่งนี้ช่วยให้ฉันแก้ไขความจริงที่ว่าฉันได้รับ HTML ที่สร้างอัตโนมัติโดย webpack ตอนนี้ด้วยการตั้งค่าtemplateพารามิเตอร์นี้ฉันสามารถระบุ html ของตัวเองได้โดยไม่มีปัญหา ขอบคุณมาก!
danivicario

1

ฉันได้ลบ index.html โดยไม่ได้ตั้งใจจากนั้นฉันก็ได้รับเฉพาะรายการไดเรกทอรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.