จะเข้าถึง webpack-dev-server จากอุปกรณ์ในเครือข่ายท้องถิ่นได้อย่างไร?


115

มีการกำหนดค่าเซิร์ฟเวอร์ webpack dev (เป็นส่วนหนึ่งของ config ทั้งหมด):

config.devServer = {
  contentBase: './' + (options.publicFolder ? options.publicFolder : 'public'),
  stats: {
    modules: false,
    cached: false,
    colors: true,
    chunk: false
  },
  proxy: [{
    path: /^\/api\/(.*)/,
    target: options.proxyApiTarget,
    rewrite: rewriteUrl('/$1'),
    changeOrigin: true
  }]
};

function rewriteUrl(replacePath) {
  return function (req, opt) {  // gets called with request and proxy object
    var queryIndex = req.url.indexOf('?');
    var query = queryIndex >= 0 ? req.url.substr(queryIndex) : "";
    req.url = req.path.replace(opt.path, replacePath) + query;
    console.log("rewriting ", req.originalUrl, req.url);
  };
}

ฉันรัน webpack ด้วยคำสั่งต่อไปนี้:

node node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --history-api-fallback --debug --inline --progress --config config/webpack.app.dev.js

ฉันสามารถเข้าถึงเซิร์ฟเวอร์ dev โดยใช้http://localhost:8080บนเครื่องในพื้นที่ของฉัน แต่ฉันก็ต้องการเข้าถึงเซิร์ฟเวอร์ของฉันจากมือถือแท็บเล็ตของฉันด้วย (อยู่ในเครือข่าย Wi-Fi เดียวกัน)

ฉันจะเปิดใช้งานได้อย่างไร? ขอบคุณ!


ดูเหมือนว่าจะใช้งานได้แล้วเนื่องจากโฮสต์ถูกตั้งค่าเป็น 0.0.0.0
Felix Kling

@FelixKling แต่ที่อยู่ IP ใดที่ฉันควรใช้ใน Safari ของ iPhone ของฉัน
malcoauri

IP ของเครื่องที่เซิร์ฟเวอร์ทำงาน
Felix Kling

2
ฉันสามารถทำให้มันทำงานได้โดยwebpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpดูที่github.com/webpack/webpack-dev-server/issues/882
Nickofthyme

คำตอบ:


202

(หากคุณใช้ Mac และเครือข่ายเหมือนของฉัน)

เรียกใช้ webpack-dev-server ด้วย--host 0.0.0.0- สิ่งนี้ช่วยให้เซิร์ฟเวอร์รับฟังคำขอจากเครือข่ายไม่ใช่แค่ localhost

ค้นหาที่อยู่คอมพิวเตอร์ของคุณบนเครือข่าย ในเทอร์มินัลให้พิมพ์ifconfigและค้นหาen1ส่วนหรือส่วนที่มีคำสั่งเช่นinet 192.168.1.111

ในอุปกรณ์มือถือของคุณบนเครือข่ายเดียวกันเยี่ยมชมhttp://192.168.1.111:8080และเพลิดเพลินกับการโหลดใหม่


4
สำหรับฉันมันใช้งานได้เช่นกัน แต่ฉันได้รับหน้าว่าง ฉันสามารถเลื่อนและตั้งชื่อไซต์ได้เมื่อฉันเรียกดูแท็บต่างๆ คุณอาจมีความคิดที่จะแก้ไขปัญหานี้หรือไม่?
moesphemie

2
ใช้งานได้กับ Ubuntu 17.10 หากifconfigไม่ได้ติดตั้งสามารถดูที่อยู่ IP ได้ทางip addr show
TitanFighter

1
ในการเรียกใช้เซิร์ฟเวอร์ dev ด้วย--host 0.0.0.0เราควรอัปเดตไฟล์ config บางไฟล์หรือสามารถเรียกใช้งานได้npm run dev --host 0.0.0.0หรือไม่? เพราะตอนนี้เมื่อฉันรันคำสั่งโดยไม่เปลี่ยนแปลงอะไรมันจะทำให้เกิดข้อผิดพลาด ถ้าเราต้องอัพเดตไฟล์ config คุณช่วยบอกชื่อไฟล์ / ไดเร็กทอรีได้ไหม
PrintlnParams

npm รัน dev --host 0.0.0.0 แสดงข้อผิดพลาดที่ระบุว่าโปรแกรมกำลังมองหา "0.0.0.0" เป็นชื่อโมดูล เมื่อฉันเปลี่ยนค่าภายในไฟล์ index.js ของโปรเจ็กต์ของฉันเป็น "0.0.0.0" จาก "localhost" แล้วมันก็ใช้งานได้
Vasily Hall

1
ยังคงทำงานในเดือน ธ.ค. 61 สำหรับฉัน FYI แทนที่จะมองหาที่อยู่ IP ในเทอร์มินัลฉันทำสิ่งต่อไปนี้: cmd + [space]> Network Utility ที่อยู่ IP ของฉันเป็นรายการที่สองลง ดูเหมือนว่าจะได้ผลทุกครั้งที่ฉันลอง
jared

92

คุณสามารถตั้งค่าที่อยู่ IP ของคุณได้โดยตรงในไฟล์กำหนดค่า webpack:

devServer: {
    host: '0.0.0.0',//your ip address
    port: 8080,
    disableHostCheck: true,
    ...
}

1
สิ่งนี้ใช้ได้ผลสำหรับฉันค่าคือ 0.0.0.0 ซึ่งใช้ได้ผล
Vasily Hall

2
บน windows มันใช้งานได้สำหรับฉันด้วย wifi ฉันเขียนโฮสต์ในipconfig > IPv4 Address
URL87

1
นี่เป็นสิ่งที่ดีที่สุดฉันกล้าพูดตอบเท่านั้น ทำไมถึงไม่ถูกทำเครื่องหมายเช่นนี้!
Kamal

หากคุณต้องการใช้open: trueแฟล็กคุณสามารถตั้งค่าได้openPage: 'http://localhost:8080'และเบราว์เซอร์ของคุณจะเปิดใช้งานอย่างถูกต้องอีกครั้งแทนที่จะพยายามโหลด 0.0.0.0:8080 โดยอัตโนมัติและล้มเหลว
ทำเครื่องหมาย

ใช้งานได้ แต่ระวังการผูก 0.0.0.0 ในที่สาธารณะซึ่งอาจมีคนอื่นเชื่อมต่อกับอุปกรณ์ของคุณ อาจทำให้ข้อมูลของคุณถูกขโมย คุณอาจต้องมีไฟร์วอลล์สำหรับเซิร์ฟเวอร์ dev เช่นgithub.com/funbox/webpack-dev-server-firewall
Igor Adamenko

16

อาจไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบ แต่ฉันคิดว่าคุณสามารถใช้ngrokสำหรับสิ่งนี้ได้ Ngrokสามารถช่วยให้คุณเปิดเผยเว็บเซิร์ฟเวอร์ภายในสู่อินเทอร์เน็ตได้ คุณสามารถชี้ ngrok ที่เซิร์ฟเวอร์ dev ในพื้นที่ของคุณจากนั้นกำหนดค่าแอปของคุณให้ใช้ ngrok URL

เช่นสมมติว่าเซิร์ฟเวอร์ของคุณกำลังทำงานอยู่บนพอร์ต8080 คุณสามารถใช้ ngrok เพื่อเปิดเผยสิ่งนั้นสู่โลกภายนอกผ่านการวิ่ง

./ngrok http 8080

เอาท์พุท ngrok ที่นี่

สิ่งที่ดีngrokคือมีURL ที่เปิดเผยในเวอร์ชันhttps ที่ปลอดภัยยิ่งขึ้นซึ่งคุณมอบให้กับบุคคลอื่นในโลกเพื่อทดสอบหรือแสดงผลงานของคุณ

นอกจากนี้ยังมีการปรับแต่งมากมายในคำสั่งเช่นตั้งชื่อโฮสต์ที่เป็นมิตรกับผู้ใช้แทนที่จะเป็นสตริงแบบสุ่มใน url ที่เปิดเผยและสิ่งอื่น ๆ อีกมากมาย

ถ้าคุณเพียงต้องการที่จะเปิดเว็บไซต์ของคุณเพื่อตรวจสอบการตอบสนองของมือถือที่คุณควรไปสำหรับbrowersync


8

สำหรับฉันในที่สุดสิ่งที่ช่วยได้คือการเพิ่มสิ่งนี้ลงในการกำหนดค่า webpack-dev-server:

new webpackDev(webpack(config), {
    public: require('os').hostname().toLowerCase() + ':3000'
    ...
})

จากนั้นเปลี่ยนไฟล์ webpack.config.js ของ babel:

module.exports = {
    entry: [
        'webpack-dev-server/client?http://' + require('os').hostname().toLowerCase() + ':3000',
        ...
    ]
    ...
}

ตอนนี้เพียงแค่รับชื่อโฮสต์คอมพิวเตอร์ของคุณ ( hostnameบนเทอร์มินัลของ OSX) เพิ่มพอร์ตที่คุณกำหนดและคุณก็พร้อมที่จะใช้งานมือถือ

เมื่อเทียบกับ ngrok.io แล้วโซลูชันนี้จะช่วยให้คุณใช้โมดูลการรีโหลดแบบร้อนของ react บนมือถือได้


7

ฉันไม่สามารถแสดงความคิดเห็นเพื่อเพิ่มข้อมูลเพิ่มเติมในคำตอบของ forresto แต่ที่นี่ในอนาคต (2019) คุณจะต้องเพิ่ม--publicค่าสถานะเนื่องจากช่องโหว่ด้านความปลอดภัย--host 0.0.0.0เพียงอย่างเดียว ตรวจสอบความคิดเห็นนี้เพื่อดูรายละเอียดเพิ่มเติม

เพื่อหลีกเลี่ยง "การตอบสนองต่อคำตอบอื่น ๆ " เนื่องจากคำตอบนี่คือคำแนะนำของ forresto และรายละเอียดเพิ่มเติมที่คุณจะต้องดำเนินการนี้:

เพิ่มทั้งสองอย่าง:

--host 0.0.0.0

และ

--public <your-host>:<port>

โดยที่โฮสต์ของคุณคือชื่อโฮสต์ (สำหรับฉันมันคือ (ชื่อ) s-macbook-pro.local)) และพอร์ตคือพอร์ตใดก็ได้ที่คุณพยายามเข้าถึง (อีกครั้งสำหรับฉันคือ 8081)

นี่คือลักษณะของ package.json ของฉัน:

  "scripts": {
    ...
    "start:webpack": "node_modules/.bin/webpack-dev-server --host 0.0.0.0 --public <name>s-macbook-pro.local:8081",
    ...
  },

น่าเสียดายที่ไม่ได้ผลสำหรับฉัน ฉันใช้ windows 10 และไม่สามารถเข้าถึงเว็บแอพ dev ด้วยโทรศัพท์มือถือของฉัน เบราว์เซอร์มือถือทำให้ฉันมีข้อผิดพลาดการหมดเวลา เมื่อฉันเริ่มแอปพลิเคชันเว็บบนแล็ปท็อป Windows 10 เครื่องเดียวกัน แต่ให้บริการผ่านแมวตัวผู้ฉันสามารถเข้าถึงเว็บแอปนั้นได้โดยพิมพ์ที่อยู่ ip ของแล็ปท็อป windows ของฉันตามด้วยหมายเลขพอร์ต ฉันไม่รู้จริงๆว่าทำไมถึงเป็นไปได้ แต่ฉันไม่สามารถเปิดเว็บแอพในเครื่องที่ทำงานบนเซิร์ฟเวอร์ webpack ได้ ใครมีความคิดเกี่ยวกับสิ่งอื่นใดที่ฉันสามารถพยายามทำให้การเข้าถึงเว็บแอปในพื้นที่สำหรับโทรศัพท์มือถือของฉัน
ampersand83
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.