Làm cách nào để truy cập vào webpack-dev-server từ các thiết bị trong mạng cục bộ?


112

Có một số cấu hình máy chủ webpack dev (nó là một phần của toàn bộ cấu hình):

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);
  };
}

Tôi thực thi webpack bằng lệnh sau:

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

Tôi có thể truy cập vào máy chủ nhà phát triển bằng cách sử dụng http://localhost:8080trên máy cục bộ của mình, nhưng tôi cũng muốn có quyền truy cập vào máy chủ của mình từ điện thoại di động, máy tính bảng của tôi (chúng ở trong cùng một mạng Wi-Fi).

Làm cách nào để kích hoạt nó? Cảm ơn!


Có vẻ như điều đó đã hoạt động, vì máy chủ được đặt thành 0.0.0.0.
Felix Kling

@FelixKling nhưng tôi nên sử dụng địa chỉ ip nào trong Safari của iPhone cho nó?
malcoauri

IP của máy nơi máy chủ chạy.
Felix Kling

2
Tôi chỉ có thể làm cho nó hoạt động với webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpxem github.com/webpack/webpack-dev-server/issues/882
Nickofthyme

Câu trả lời:


199

(Nếu bạn đang sử dụng máy Mac và mạng như của tôi.)

Chạy webpack-dev-server với --host 0.0.0.0- điều này cho phép máy chủ lắng nghe các yêu cầu từ mạng, không chỉ localhost.

Tìm địa chỉ máy tính của bạn trên mạng. Trong thiết bị đầu cuối, hãy nhập ifconfigvà tìm en1phần hoặc phần có nội dung nhưinet 192.168.1.111

Trên thiết bị di động của bạn trên cùng một mạng, hãy truy cập http://192.168.1.111:8080và tận hưởng niềm hạnh phúc khi tải lại nóng của nhà phát triển.


4
Đối với tôi, nó cũng đang hoạt động nhưng tôi đang nhận được một trang trống. Tôi có thể cuộn và có tiêu đề trang web khi tôi duyệt qua các tab. Bạn có thể có một ý tưởng làm thế nào để khắc phục điều này?
moesphemie

2
Cũng hoạt động trên Ubuntu 17.10. Nếu ifconfigchưa được cài đặt, địa chỉ IP có thể được tìm thấy quaip addr show
TitanFighter

1
Để chạy máy chủ nhà phát triển với --host 0.0.0.0, chúng ta vẫn nên cập nhật một số tệp cấu hình hay tôi có thể chỉ chạy npm run dev --host 0.0.0.0? Bởi vì hiện tại khi tôi chạy lệnh mà không thay đổi bất cứ điều gì nó ném ra một lỗi. Nếu chúng tôi phải cập nhật một số tệp cấu hình, bạn có thể cho chúng tôi biết tên / thư mục tệp không?
PrintlnParams

npm run dev --host 0.0.0.0 ném lỗi cho biết chương trình đang tìm kiếm "0.0.0.0" làm tên mô-đun. Khi tôi thay đổi giá trị bên trong tệp index.js của dự án của mình thành "0.0.0.0" từ "localhost", thì nó đã hoạt động.
Vasily Hall

1
vẫn làm việc vào tháng 12 năm 18 cho tôi. FYI thay vì tìm Địa chỉ IP trong thiết bị đầu cuối, tôi thực hiện như sau: cmd + [dấu cách]> Tiện ích mạng, Địa chỉ IP của tôi là mục thứ hai xuống. Điều đó dường như hiệu quả mỗi khi tôi thử nó.
jared

90

Bạn có thể đặt địa chỉ ip của mình trực tiếp trong tệp cấu hình webpack:

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

1
Điều này làm việc cho tôi, giá trị là 0.0.0.0 đã hoạt động.
Vasily Hall

2
Trên cửa sổ nó làm việc cho tôi với wifi tôi đã viết các máy chủ trongipconfig > IPv4 Address
URL87

1
Điều này, cho đến nay, là tốt nhất, tôi dám nói, chỉ có câu trả lời. Tại sao nó không được đánh dấu như vậy ?!
Kamal

Nếu bạn cũng muốn sử dụng open: truecờ, thì bạn cũng có thể đặt openPage: 'http://localhost:8080'và trình duyệt của bạn sẽ khởi chạy lại đúng cách, thay vì cố gắng tự động tải 0.0.0.0:8080 và không thành công.
Đánh dấu

Nó hoạt động, nhưng hãy lưu ý ràng buộc 0.0.0.0 ở những nơi công cộng nơi người khác có thể kết nối với thiết bị của bạn. Nó có thể dẫn đến việc dữ liệu của bạn bị đánh cắp. Bạn có thể cần tường lửa cho máy chủ nhà phát triển, như sau: github.com/funbox/webpack-dev-server-firewall
Igor Adamenko

16

Nó có thể không phải là giải pháp hoàn hảo nhưng tôi nghĩ bạn có thể sử dụng ngrok cho việc này. Ngrok có thể giúp bạn đưa máy chủ web cục bộ lên internet. Bạn có thể trỏ ngrok tại máy chủ nhà phát triển cục bộ của mình và sau đó định cấu hình ứng dụng của bạn để sử dụng URL ngrok.

Ví dụ: Giả sử máy chủ của bạn đang chạy trên cổng 8080 . Bạn có thể sử dụng ngrok để hiển thị điều đó với thế giới bên ngoài bằng cách chạy

./ngrok http 8080

ngrok đầu ra ở đây

Điều tốt ngroklà nó cung cấp phiên bản https an toàn hơn của url tiếp xúc mà bạn cung cấp cho bất kỳ người nào khác trên thế giới để kiểm tra hoặc hiển thị công việc của bạn.

Ngoài ra, nó có rất nhiều tùy chỉnh có sẵn trong lệnh như đặt tên máy chủ thân thiện với người dùng thay vì chuỗi ngẫu nhiên trong url được hiển thị và nhiều thứ khác.

Nếu bạn chỉ muốn mở trang web của mình để kiểm tra khả năng đáp ứng trên thiết bị di động, bạn nên sử dụng tính năng đồng bộ hóa trình duyệt .


8

Đối với tôi, điều đã giúp cuối cùng là thêm cái này vào cấu hình webpack-dev-server:

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

và sau đó cũng thay đổi tệp webpack.config.js của babel:

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

Bây giờ chỉ cần lấy tên máy tính của bạn ( hostnametrên thiết bị đầu cuối của OSX), thêm cổng bạn đã xác định và bạn có thể sử dụng thiết bị di động.

So với ngrok.io, giải pháp này cũng sẽ cho phép bạn sử dụng mô-đun tải lại nóng của react trên thiết bị di động.


7

Tôi không thể bình luận để thêm thông tin bổ sung cho câu trả lời của forresto, nhưng ở đây, trong tương lai (2019), bạn sẽ cần thêm --publiccờ do một lỗ hổng bảo mật --host 0.0.0.0. Kiểm tra bình luận này để biết thêm chi tiết.

Để tránh "trả lời các câu trả lời khác" như một câu trả lời, đây là lời khuyên của forresto cùng với các chi tiết bổ sung mà bạn cần để làm cho việc này hoạt động:

Thêm cả hai:

--host 0.0.0.0

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

trong đó máy chủ lưu trữ của bạn là tên máy chủ (đối với tôi là (tên) s-macbook-pro.local)) và cổng là bất kỳ cổng nào bạn đang cố gắng truy cập (một lần nữa, đối với tôi đó là 8081).

Vì vậy, đây là những gì package.json của tôi trông như thế này:

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

Thật không may, điều đó không hiệu quả với tôi. Tôi đang sử dụng windows 10 và không thể truy cập ứng dụng web dành cho nhà phát triển của mình bằng điện thoại di động. Trình duyệt di động chỉ cho tôi một lỗi hết thời gian chờ. Khi tôi khởi động một ứng dụng web trên cùng một máy tính xách tay windows 10, nhưng phân phối nó qua tomcat, tôi có thể truy cập ứng dụng web cục bộ đó bằng cách nhập địa chỉ ip của máy tính xách tay windows của tôi, sau đó là số cổng. Tôi thực sự không biết tại sao điều đó lại có thể xảy ra nhưng tôi không thể mở ứng dụng web cục bộ đang chạy trên trình phát triển webpack. Có ai có bất kỳ ý tưởng nào khác mà tôi có thể thử tạo quyền truy cập ứng dụng web cục bộ cho điện thoại di động của mình không?
dấu và 83
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.