如何测试使用Angular CLI ng创建的应用程序是否可以从其他设备进行测试?

时间:2016-08-21 23:34:03

标签: networking angular angular-cli

我从头开始使用Angular CLI生成应用程序。 CLI版本angular-cli: 1.0.0-beta.11-webpack.2

我正试图通过我的智能手机测试它,但我得到拒绝连接

因此,我在笔记本电脑上运行ng serve并尝试访问该应用:

  • 从笔记本电脑上,使用localhost:工作
  • 从笔记本电脑上,使用IP:拒绝连接
  • 从智能手机,使用IP:拒绝连接

这曾用于以前的SystemJS版CLI。我检查过我没有运行防火墙。

我该如何修复或调试此错误?

我正在使用Mac。

5 个答案:

答案 0 :(得分:60)

使用值" 0.0.0.0"添加host-flag;应该允许您从本地网络上的任何设备访问网络服务器。

这应该有效: ng serve --host 0.0.0.0

有关解释: https://github.com/angular/angular-cli/pull/1475#issuecomment-235986121

答案 1 :(得分:9)

在package.json

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

但是--disable-host-check会带来安全风险 而且你需要 "@angular/cli": "^1.1.0-rc.2"因为此标志出现在1.1版本

答案 2 :(得分:2)

Following the advice on this page: https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a, this worked for me:

ng serve --host 0.0.0.0 --host my-computer

答案 3 :(得分:2)

也许这可能会有所帮助(@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"
  }

然后运行“npm start”

然后,您可以通过黄色打印的地址在本地网络上的任何设备上打开您的应用。

@ angular / cli:1.3.2,node:6.9.5

在Mac和Windows上测试

答案 4 :(得分:-4)

你必须在node_modules angular cli文件夹中找到localhost的所有出现并替换(特别是一个,取决于你的angular-cli版本)0.0.0.0。

然后在package.json中输入ng serve --host 0.0.0.0

在我的情况下,文件是命令/ serve.js