37

我对 Node.js 平台上的 Web 开发很感兴趣。我的主机操作系统是 Windows 7。设置开发环境的首选方法是什么。直接在主机上运行还是在基于 linux 的虚拟机上运行?这两种方法的优缺点是什么?

如果我使用虚拟机,我是否仍然可以在 Windows 中运行文本编辑器和 Web 浏览器(出于性能原因)?

4

5 回答 5

42

嗯,经验之谈,用Linux码头工人。

编辑使用 Docker。烘焙您的依赖项,在运行时挂载您的项目,仅固定到特定版本的 LTS 节点。我会在无法运行的项目上使用 2gb 的 docker 映像,这会导致被迫升级到新软件包的日子失去了。- 2018/04/10

但是对于过去 8 年在基于 linux 的环境中进行开发的人,以及在过去 6 个月中使用 nodejs 在 windows dot net 环境中开发软件的人来说,这是我的发现,无论是令人震惊还是其他...

窗户问题:

  • 无法有效利用docker就我而言,最新版本的 docker 工具包解决了这个问题。ymmv。
  • 大多数节点模块都需要 node_gyp,从表面上看似乎没有问题(因为 gyp 应该是跨平台编译器),除非您深入研究在 Windows 上运行它需要什么:安装 Visual Studio 就可以了. 由于以下几个原因,这对我来说很糟糕:
  • 我通常在 linux 上,所以我永远不想使用 Visual Studio。
  • 在 Windows 上编译某些东西至少需要 3GB 的 IDE 安装,这完全是最荒谬的想法……不是库,而是我永远不会启动的完全单一的 GUI 软件。
  • 相当于 Windows 的 debiansbuild-essentials实际上是一个分散在 Internet 上的、分散在 Internet 上的、分散的、名称错误的 gui 安装程序集合,所有这些都需要特定的安装顺序。相比之下,这sudo apt-get install build-essentials过于耗时且充满隐藏的陷阱。

  • 在 Windows 上开发将使您养成混合大小写路径名称的坏习惯,除非您的团队要么有严格的政策要遵循/执行,否则这将是以后出现问题的滑坡。

  • 虽然 windows 在路径中支持超过 256 个字符,但重要的工具却不支持。进入舞台左侧:rimraf 和 robocopy ......呃。

  • Windows终端很糟糕......默认shell也是如此:cmd.exe...... Powershell 的语法过于冗长,不符合我的口味……安装 Cmder 可以在一定程度上缓解这种情况,但是 Cmder 与 cmd.exe 交互的唯一方法是基本上将击键复制到运行 cmd.exe 的隐藏 Windows 终端。(洛鲁特)。Cmder 与更模块化的 shell(zsh、bash 等)一起工作得更好。. 更新:我现在使用带有 pshazz 和 scoop 的 powershell,实际上使用起来很愉快。

  • 仍然改进了 shell 和终端的情况,windows 的 nodejs 仍然会假设你的环境变量是 %OF% %THE% %WINDOWS% %VARIETY%...而不是 $UNIX $STYLE。因此,您基本上将主要从 cmd.exe 使用 bower 和 npm ......更多啊。我似乎不再有这个问题,因为我已经混合了cross-env指挥官或 yargs。

    • 你还需要为 windows 安装 python,这不是问题,因为 choco 存在并且你回到那里。更新:看看 boxstarter,它将帮助您使用食谱自动化您的新机器设置(或者您实际上可以毕业使用 ansible 或 salt)。

    • 经验丰富的 python,ruby 开发人员会告诉您,旧项目将需要他们的引擎版本,以便在您需要重新访问它们时(升级到新版本大多不方便或不实用,请阅读:兔子洞),所以你会想要 rvm 和 virtualenv 之类的东西...

    • nvm(仅适用于 unix 系统 linux 和 macosx),因为它是 bash 脚本的集合。我推荐使用 ZSH 作为你的 shell 以及 Zgen 和Tarrasch/zsh-autoenv插件。

    • nodeenv,更可能是……一个与virtualenv集成的python程序。有些人喜欢这样。我对此没有任何问题,但我们的团队使用的是 nvm。
    • 但是,由于“原因”,您最好使用 nvm-windows。从头开始,nodist在windows上使用......更好的选择,你不必担心某种autoenv,因为nodist by design可以处理这个问题。

在 Windows 上安装:

  1. 安装巧克力
  2. choco install cmder nodejs python2 choco install python2
  3. install http://scoop.sh,然后用它来安装 pshazz。
  4. 删除全局手动安装的任何节点版本。
  5. 安装 nvm-windows安装节点。
  6. 安装visual-studio 2012 express,如果你珍惜你的CPU周期,就永远不要启动它。这可能有点矫枉过正,因为微软已经发布了与 build-essentials 等效的版本。
  7. 安装 windows 7/10 64bit sdk

Linux 上的问题:

tldr; 使用非虚拟机。出于以下原因之外的更多原因。

  • 您必须将全局 npm node_modules 路径设置为用户拥有的目录(我已经开始使用~/.local/share/npm)。令人高兴的是,我发现 nodejs 的 windows 安装是正确的(可能不是故意的)。使用 nvm 时没有问题。
  • Ubuntu 已经有一个名为 的二进制文件node,因此#!/usr/bin/env node默认情况下不会运行 nodejs。幸运的是,debian 系统有一个简洁的管理工具来控制env二进制文件发出的内容:update-alternatives. 忽略此处使用符号链接的建议,这只会在以后以微妙的方式引起问题。使用 nvm 时也不是问题。

在 Linux 上安装:

$ sudo apt-get install git-core git-flow build-essentials python-dev python-  pip
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash
$ npm config set prefix ~/.local/share/npm
$ nvm install stable
$ nvm alias default stable

参考:

于 2014-12-13T09:43:58.040 回答
22

我们有一个系统,通过它我们只使用一个配置文件,它可以处理我们所有的问题,比如路径差异("c:\blarg"vs "~user/blarg"),并且作为奖励,让我们可以控制调试和生产环境之间的差异。

Node.js 是跨平台的,所以我们完全有开发人员在各种计算机上工作,这完全没有问题。

这是我在文件存储项目中使用的示例配置文件:

/**
 * All of these are mandatory except for log_level (which defaults to "info", 1) 
 * and log_echo_to_console (which defaults to false)
 */
exports.config = {
    log_level: 0,
    log_file: "/path/to/send.log",
    request_log_file: "/path/to/send_requests.log",
    log_echo_to_console: true,
    port_number: 8088,
    no_notification_emails: true,
    image_url_base: "http://s3.amazonaws.com/",      // MAKE SURE THIS ENDS IN "/"
    tmp_file_folder:"/tmp/",
    s3_info: {
        key: 'xxxxxx',
        secret: 'yyyyy',
        file_bucket: 'sendtransfer/',
    },
    backend_info: {
        db_info: {
            server: "localhost",
            user: "db_user",
            password: "secret",
            database: "SendRemote",
            pooled_connections: 125,
            idle_timeout_millis: 30000
        },
        memcache_info: {
            host: "127.0.0.1",
            port: "31111",
            pooled_connections: 200,
            timeout: 20000
        }
    },

    debug_server: true
};

对于 Windows 机器,只需更改路径。都很好!

然后在代码中,您只需键入:

var local = require('local.config.js');
fs.writeFile(local.config.log_file);
// etc

拥抱多元文化!!!

于 2012-09-25T13:30:05.770 回答
6

我也在 Windows 7 上并在 Linux ( debian ) 客户机上使用 Virtualbox,我会推荐它,因为我自己在命令行中做一些事情然后在 Windows 中单击 arround 更快。

另一个不错的功能是,如果您将 VM 放在 U 盘上,您可以随身携带并在任何安装了 Virtualbox 主机的地方使用它,这样您就可以随身携带整个开发环境。

在 Windows 中使用您喜欢的文本编辑器或浏览器完全没有问题,只需安装 samba 并将您的主目录挂载到 Windows 中即可。您的浏览器也是如此,因为虚拟机只是局域网中的另一台机器,而不是将浏览器指向本地主机,而是将其指向虚拟机 Ip,您就可以了。

明显的缺点是,如果您没有任何 Linux 经验,但您可能应该坚持使用 Windows,因为您需要一些时间才能进入它。

于 2012-09-25T13:50:00.890 回答
2

只是我的两分钱可能更少:

我会建议你第三种选择:双重安装 windows/ubuntu 设置(最好是对 gui 最​​友好的ubuntu dist)并研究这个选项,这样你会更熟悉 linux/unix 甚至 iOS,甚至会让你更好地理解windows,成为更好的程序员。有时虚拟机太慢,而 linux 的资源效率很高。

如果您有能力安装虚拟机,您也可以尝试安装linux 发行版 ,并让自己熟悉这种语言/系统的操作系统,许多网络都是基于这种语言/系统构建的

于 2013-09-01T11:02:23.760 回答
0

我真的很喜欢在 Windows 上使用 git bash 编码 node.js:http: //blog.nodester.com/post/19902515151/tips-for-windows-users

它似乎比运行 VirtualBox 更快更容易。鉴于我在投入生产之前仍然使用 Virtual Box 进行测试。

于 2012-09-25T16:09:04.713 回答