NodeJs 项目跨系统使用的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
clearbug
V2EX    Node.js

NodeJs 项目跨系统使用的问题

  •  
  •   clearbug 2017-04-09 10:42:51 +08:00 4543 次点击
    这是一个创建于 3183 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 SF 上问了一个 NodeJs 项目跨系统使用的问题:https://segmentfault.com/q/1010000008993837,一天了没得到答案,搬到 v2 来求大神解答。

    28 条回复    2017-04-10 14:11:41 +08:00
    behappy
        1
    behappy  
       2017-04-09 10:54:25 +08:00
    vim :set ff=unix
    clearbug
        2
    clearbug  
    OP
       2017-04-09 11:01:47 +08:00
    @behappy #1 你跟 sf 上的两个人一样误解我的意思了啊。。我知道可以在 vim 或者一些编辑器里设置不同的换行方式,但是,我这个项目已经写好发布到 npm 仓库了,以后使用时不论 Windows 还是 Linux 下都可以直接使用`npm install -g package-name`的方式进行安装使用了,难道我每次在 Linux 下安装时都得去用编辑器去替换一下换行风格才能使用吗?这得多麻烦,更别提让别人使用
    lwdggm
        3
    lwdggm  
       2017-04-09 11:08:10 +08:00 via Android
    在#! /usr/bin/env node 隔一行再写你的 js 代码。

    ```
    #! /usr/bin/env node
    //这一行保持为空,不要写任何东西
    console.log(1)
    ```
    clearbug
        4
    clearbug  
    OP
       2017-04-09 11:14:02 +08:00
    @lwdggm #3 还是不行,一样的问题。搞不明白像 hexo 那种在任何系统上一键安装了就可以直接使用的项目是怎么做到的。。。
    lwdggm
        5
    lwdggm  
       2017-04-09 11:19:53 +08:00 via Android
    上面的例子,注释也不要有。简单说就是
    连续换两行
    lwdggm
        6
    lwdggm  
       2017-04-09 11:24:12 +08:00 via Android
    对了,你的 linux 下 node 命令能用吗,一般装好是 nodejs 命令
    pigzilla
        7
    pigzilla  
       2017-04-09 11:24:19 +08:00
    无语,再发一个新版本改掉换行符的问题不就行了吗。。。。
    bdbai
        8
    bdbai  
       2017-04-09 11:26:44 +08:00 via Android
    只要用 \n 就可以了,已经发布到 npm 仓库的再发布一次呗。
    你有没有注意过其它 node 模块是如何处理的?
    clearbug
        9
    clearbug  
    OP
       2017-04-09 11:29:24 +08:00
    @lwdggm #5 你确定你说的可行吗?我都试了不行啊,,
    clearbug
        10
    clearbug  
    OP
       2017-04-09 11:30:22 +08:00
    @lwdggm #6 linux 下确定是有 node 命令的,也可以正常使用,因为我只要在 vim 下把文件转换为 unix 风格就可以用了
    clearbug
        11
    clearbug  
    OP
       2017-04-09 11:33:02 +08:00
    @pigzilla #7 再发一个新版本。。。你的意思是不同系统就不同版本吗?方法虽然可行,但是这并不能解决我的疑惑。。。你想想像 hexo 这种在命令行下就可以一键生成一个博客目录的工具,它可不是 Windows 系统有一个版本, linux 系统有一个版本吧
    clearbug
        12
    clearbug  
    OP
       2017-04-09 11:36:18 +08:00
    @bdbai #8 就是不知道其他 node 模块是怎么处理才做到跨系统时可以不受不同换行符风格的干扰的,也不用像楼上说的针对不同系统发布不同版本。如果我使用\n ,那么我在 Windows 下直接一键安装使用时岂不是还是有问题?因为 Windows 下\r\n 才是换行啊。。。
    bdbai
        13
    bdbai  
       2017-04-09 11:36:44 +08:00 via Android
    @clearbug 全部统一 \n 就行了啊,你看 hexo 模块代码用什么换行的。
    pigzilla
        14
    pigzilla  
       2017-04-09 11:51:08 +08:00
    @clearbug #11 UNIX LF 的是被所有系统的 node 接收的。。。。你没注意到你用的所有包都是一个 UNIX LF 的版本吗。
    clearbug
        15
    clearbug  
    OP
       2017-04-09 12:07:54 +08:00
    @bdbai #13
    @pigzilla #14
    嗯嗯,你们说的是对的,刚才亲测,只要使用\n 这种换行符就可以实现跨系统正常使用了。刚才专门去我 win7 上全局安装的 hexo 看了下它的换行风格,确实就是\n ,之前想当然的以为它是使用\r\n 的,还以为有什么高超的技术可以在不同系统上安装时自动使用不同的换行符呢。。。
    clearbug
        16
    clearbug  
    OP
       2017-04-09 12:10:18 +08:00
    @pigzilla #14 你说的 UNIX LF 是被所有系统的 node 接收的,这个又让我疑惑了。。第一行这一句`#!/usr/bin/env node`难道不是给操作系统读取以便查找运行该脚本的程序用的吗?
    momocraft
        17
    momocraft  
       2017-04-09 12:31:06 +08:00
    @clearbug 只有 Unix 原生地认 shebang 那一行, 执行时的顺序是 OS 解析 shebang -- OS 启动 node.

    我猜测在 Windows 版会有其他行为, 比如用文件关联决定启动 node.
    bdbai
        18
    bdbai  
       2017-04-09 12:49:02 +08:00 via Android
    @clearbug Git 倒是用了“高超的技术”, Windows 下 CRLF , Linux 下 LF ,提交自带转换。
    LioMore
        19
    LioMore  
       2017-04-09 12:54:36 +08:00
    ```bash
    $ git config --global core.autocrlf false
    $ git config --global core.eol lf
    ```
    zyEros
        20
    zyEros  
       2017-04-09 12:58:13 +08:00 via iPhone
    用 sublime 转一下文件的换行
    clearbug
        21
    clearbug  
    OP
       2017-04-09 13:38:03 +08:00
    @bdbai #18
    @LioMore #19
    git 这个功能我倒是知道的。我就是因为知道 git 有这种功能,所以还以为 nodejs 也有类似的功能了
    clearbug
        22
    clearbug  
    OP
       2017-04-09 13:39:03 +08:00
    @zyEros #20 sublime 也可以进行换行符风格转换吗?刚才没找到,我还专门安装了 vscode 。。。
    clearbug
        23
    clearbug  
    OP
       2017-04-09 13:41:05 +08:00
    @momocraft #17
    嗯,我也是一直对 Windows 下写这一句的作用很迷惑
    loading
        24
    loading  
       2017-04-09 14:00:48 +08:00
    这个上次我用 vscode 的 go 插件(linux 环境),遇到一个 bug ,他们使用 windows 开发的,最后换到 osx 就好了。

    https://github.com/Microsoft/vscode-go/pull/838
    zyEros
        25
    zyEros  
       2017-04-09 14:25:22 +08:00 via iPhone
    @clearbug 可以
    bdbai
        26
    bdbai  
       2017-04-09 14:35:13 +08:00 via Android
    @clearbug Git 着眼于协作,而 NPM 只要能给 Nodejs 跑起来就行了,没必要再转换的。
    Natsumoku
        27
    Natsumoku  
       2017-04-10 13:51:27 +08:00
    @clearbug Sublime 菜单的 view->line endings 里,可以在 windows 和 unix 的换行符间切换。另外, linux 下的命令“ dos2unix ”可以批量转换文件的换行符,这个方法很适合一下子转换整个 project 里的所有换行符。
    clearbug
        28
    clearbug  
    OP
       2017-04-10 14:11:41 +08:00
    @Natsumoku #27 嗯嗯,感谢,找到了。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5173 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 07:43 PVG 15:43 LAX 23:43 JFK 02:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86