web-dev-qa-db-fra.com

Comment tester une application créée avec Angular CLI ng serve from another device?

J'ai une application générée avec Angular CLI à partir de zéro. CLI version angular-cli: 1.0.0-beta.11-webpack.2

J'essaie de le tester depuis mon smartphone mais j'obtiens Connexion refusée.

Donc, je lance ng serve sur mon ordinateur portable et essayez d'accéder à l'application:

  • Depuis un ordinateur portable, en utilisant localhost: Works
  • Depuis un ordinateur portable, en utilisant IP: connexion refusée
  • Depuis le smartphone, en utilisant IP: Connexion refusée

Cela fonctionnait avec la précédente version SystemJS de CLI. J'ai vérifié que je n'ai pas de pare-feu en cours d'exécution.

Comment pourrais-je corriger ou déboguer cette erreur?

J'utilise un Mac.

31
Carlos Mermingas

L'ajout du drapeau d'hôte avec la valeur "0.0.0.0" devrait vous permettre d'accéder au serveur Web depuis n'importe quel appareil de votre réseau local.

Cela devrait fonctionner: ng serve --Host 0.0.0.0

Pour une explication: https://github.com/angular/angular-cli/pull/1475#issuecomment-235986121

63
grotz

Dans package.json

 "start": "ng serve --Host 0.0.0.0   --port 4200 --disable-Host-check ",

Toutefois --disable-Host-check serait un risque pour la sécurité et vous aurez besoin de "@angular/cli": "^1.1.0-rc.2" comme ce drapeau est apparu dans la version 1.1

9
bravik

En suivant les conseils sur cette page: https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a , cela a fonctionné pour moi:

ng serve --Host 0.0.0.0 --Host my-computer

2
Captain Whippet

Peut-être que cela peut être utile (une version un peu automatisée de la réponse de @Captain Whippet):

dev-server.js:

const os = require('os');
const { spawn } = require('child_process');

function getLocalIp(ipMatchArr) {
  const networkInterfaces = os.networkInterfaces();
  let matchingIps = Object.keys(networkInterfaces).reduce((arr, name) => {
    const matchingInterface = networkInterfaces[name].find(iface =>
      iface.family === 'IPv4' && ipMatchArr.find(match => iface.address.indexOf(match) > -1));
      if (matchingInterface) arr.Push(matchingInterface.address);
      return arr;
  }, []);

  if (matchingIps.length) {
    return matchingIps[0];
  }
  else {
    throw(`Error. Unable to find ip to use as public Host: ipMatches=['${ipMatchArr.join("', '")}']`);
  }
}

function launchDevServer(address) {
  const port = process.env.port || 4200;
  const publicHostname = address + ":" + port;
  console.log(`[[[ Access your NG LIVE DEV server on \x1b[33m ${publicHostname} \x1b[0m ]]]`);
  spawn(
      "ng serve"
    , [
          "--Host 0.0.0.0"
        , `--public ${publicHostname}`
      ]
    , { stdio: 'inherit', Shell: true }
  );
}

/* execute */
launchDevServer(getLocalIp(['192.168.1.', '192.168.0.']));

package.json:

"scripts": {
    "start": "node dev-server.js"
  }

puis lancez "npm start"

Vous pouvez ensuite ouvrir votre application sur n'importe quel appareil de votre réseau local via une adresse imprimée en jaune.

@ angulaire/cli: 1.3.2, noeud: 6.9.5

testé sur Mac et Windows

2
RUKAclMortality