Node.js开发,windows还是linux?

Gab*_*jár 35 linux windows virtualization node.js

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

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

air*_*nix 40

呃从经验,使用 Linux的 泊坞窗.

编辑使用Docker.烘焙依赖项,在运行时挂载项目,仅固定到特定版本的LTS节点.我会在不可运行的项目上采用2GB的docker镜像,导致失去被迫升级到新软件包的日子. - 2018/04/10

但是从过去8年在基于Linux的环境中开发的人,以及在Windows网络环境中使用nodejs开发软件的过去6个月,这里有我的发现,令人震惊或其他......

Windows上的问题:

  • 无法有效利用码头工具就我而言,最新版本的docker toolkit解决了这个问题.因人而异.
  • 大多数节点模块需要node_gyp,表面上似乎没有问题(因为gyp应该是跨平台编译器),除非你深入研究在Windows上运行它所需要的东西:安装visual studio的任何东西都可以工作.由于以下几个原因,这对我来说很糟糕:
  • 我通常在linux上,所以我从不想使用visual studio.
  • 完全是最荒谬的想法,在Windows上编译一些东西至少需要3GB的IDE安装...不是libs,而是一个完全单片的GUI软件,我永远不会推出.
  • 相当于debians的窗口build-essentials实际上是一个完全不同的庞大的病人名为gui的集合,只有分散在互联网上的安装人员都需要特定的安装顺序.与此相比,sudo apt-get install build-essentials它过于耗费时间并且充满了隐藏的陷阱.

  • 在Windows上开发将允许您使用混合大小写路径名称的坏习惯,除非您的团队要么遵循/强制执行严格的策略,否则这将成为后续问题的滑坡.

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

  • Windows终端糟透了...默认shell也是如此:cmd.exe ... Powershell的语法太冗长了,而且不是我的口味......安装Cmder有点缓和,但Cmder与cmd.exe接口的唯一方法是将键击复制到运行cmd.exe的隐藏windows终端.(lolwut).使用更模块化的shell(zsh,bash等),Cmder可以更好地工作..更新:我现在使用powershell与pshazz和scoop,这实际上是愉快的使用.

  • 仍然改进了shell和终端的情况,windows的nodejs仍然假设您的环境变量是%OF %%%%WINDOWS %% VARIETY%...而不是$ UNIX $ STYLE.所以你基本上都会使用bower和npm来自cmd.exe ...更多呃.我似乎不再有这个问题了,因为我已经加入了混合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设计处理这个.

在Windows上安装:

  1. 安装巧克力
  2. choco install cmder nodejs python2 choco install python2
  3. 安装http://scoop.sh,然后用它来安装pshazz.
  4. 删除全局手动安装的任何节点版本.
  5. 安装nvm-windows 安装nodist.
  6. 安装visual-studio 2012 express,如果你珍惜你的cpu周期,就不要启动它. 这可能是过度的,因为微软已经发布了相当于构建必需品的东西.
  7. 安装Windows 7/10 64位sdk

Linux上的问题:

tldr; 使用nvm.除了以下之外的更多原因.

  • 你必须将全局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
Run Code Online (Sandbox Code Playgroud)

引用:

  • 我同意,如果你想减少对NodeJS及其所有软件包的麻烦,请使用linux. (5认同)

Mar*_*Wan 21

我们有一个系统,通过它我们只使用配置文件,它处理我们所有的问题,如路径差异("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
};
Run Code Online (Sandbox Code Playgroud)

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

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

var local = require('local.config.js');
fs.writeFile(local.config.log_file);
// etc
Run Code Online (Sandbox Code Playgroud)

拥抱多元文化!

  • 所有第三方模块是否也跨平台?喜欢,mongooid,表达和解决? (2认同)

sup*_*ova 5

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

另一个不错的功能是,如果您将VM放在USB记忆棒上,您可以随身携带并在安装Virtualbox Host的任何地方使用它,这样您就可以随身携带整个开发环境.

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

这里显而易见的是,如果你没有任何Linux经验,你应该坚持使用Windows,因为它需要你花一些时间才能进入它.