NodeJs 项目跨系统使用的问题

NodeJs 项目跨系统使用的问题

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

29 回复

vim :set ff=unix


#1 你跟 sf 上的两个人一样误解我的意思了啊。。我知道可以在 vim 或者一些编辑器里设置不同的换行方式,但是,我这个项目已经写好发布到 npm 仓库了,以后使用时不论 Windows 还是 Linux 下都可以直接使用npm install -g package-name的方式进行安装使用了,难道我每次在 Linux 下安装时都得去用编辑器去替换一下换行风格才能使用吗?这得多麻烦,更别提让别人使用

在#! /usr/bin/env node 隔一行再写你的 js 代码。

<br>#! /usr/bin/env node<br>//这一行保持为空,不要写任何东西<br>console.log(1)<br>

#3 还是不行,一样的问题。搞不明白像 hexo 那种在任何系统上一键安装了就可以直接使用的项目是怎么做到的。。。

上面的例子,注释也不要有。简单说就是
连续换两行

对了,你的 linux 下 node 命令能用吗,一般装好是 nodejs 命令

无语,再发一个新版本改掉换行符的问题不就行了吗。。。。

只要用 \n 就可以了,已经发布到 npm 仓库的再发布一次呗。
你有没有注意过其它 node 模块是如何处理的?

#5 你确定你说的可行吗?我都试了不行啊,,

#6 linux 下确定是有 node 命令的,也可以正常使用,因为我只要在 vim 下把文件转换为 unix 风格就可以用了

#7 再发一个新版本。。。你的意思是不同系统就不同版本吗?方法虽然可行,但是这并不能解决我的疑惑。。。你想想像 hexo 这种在命令行下就可以一键生成一个博客目录的工具,它可不是 Windows 系统有一个版本, linux 系统有一个版本吧

#8 就是不知道其他 node 模块是怎么处理才做到跨系统时可以不受不同换行符风格的干扰的,也不用像楼上说的针对不同系统发布不同版本。如果我使用\n ,那么我在 Windows 下直接一键安装使用时岂不是还是有问题?因为 Windows 下\r\n 才是换行啊。。。

全部统一 \n 就行了啊,你看 hexo 模块代码用什么换行的。

#11 UNIX LF 的是被所有系统的 node 接收的。。。。你没注意到你用的所有包都是一个 UNIX LF 的版本吗。

#13
#14
嗯嗯,你们说的是对的,刚才亲测,只要使用\n 这种换行符就可以实现跨系统正常使用了。刚才专门去我 win7 上全局安装的 hexo 看了下它的换行风格,确实就是\n ,之前想当然的以为它是使用\r\n 的,还以为有什么高超的技术可以在不同系统上安装时自动使用不同的换行符呢。。。

#14 你说的 UNIX LF 是被所有系统的 node 接收的,这个又让我疑惑了。。第一行这一句#!/usr/bin/env node难道不是给操作系统读取以便查找运行该脚本的程序用的吗?

只有 Unix 原生地认 shebang 那一行, 执行时的顺序是 OS 解析 shebang – OS 启动 node.

我猜测在 Windows 版会有其他行为, 比如用文件关联决定启动 node.

Git 倒是用了“高超的技术”, Windows 下 CRLF , Linux 下 LF ,提交自带转换。

bash<br>$ git config --global core.autocrlf false<br>$ git config --global core.eol lf<br>

用 sublime 转一下文件的换行

#18
#19
git 这个功能我倒是知道的。我就是因为知道 git 有这种功能,所以还以为 nodejs 也有类似的功能了

#20 sublime 也可以进行换行符风格转换吗?刚才没找到,我还专门安装了 vscode 。。。

#17
嗯,我也是一直对 Windows 下写这一句的作用很迷惑

这个上次我用 vscode 的 go 插件(linux 环境),遇到一个 bug ,他们使用 windows 开发的,最后换到 osx 就好了。

https://github.com/Microsoft/vscode-go/pull/838

Git 着眼于协作,而 NPM 只要能给 Nodejs 跑起来就行了,没必要再转换的。

Sublime 菜单的 view->line endings 里,可以在 windows 和 unix 的换行符间切换。另外, linux 下的命令“ dos2unix ”可以批量转换文件的换行符,这个方法很适合一下子转换整个 project 里的所有换行符。

#27 嗯嗯,感谢,找到了。。

针对NodeJs项目跨系统使用的问题,这里提供一些常见的解决方案和注意事项:

  1. 换行符问题

    • Windows系统使用\r\n作为换行符,而Linux和macOS使用\n。这可能导致在Windows上编写的NodeJs脚本在Linux或macOS上运行时出现“没有那个文件或目录”的错误。
    • 解决方案:使用\n作为换行符,或者使用工具(如dos2unix)转换换行符。
  2. 环境变量设置

    • 在不同操作系统中设置环境变量的方式有所不同。例如,Windows使用set命令,而macOS和Linux使用export命令。
    • 解决方案:在package.jsonscripts字段中,为不同操作系统编写兼容的命令。
  3. 依赖管理

    • 确保项目的依赖在不同操作系统上都能正确安装。有时,某些依赖可能依赖于特定版本的Node.js或操作系统特性。
    • 解决方案:使用npmyarnlock文件来确保依赖版本的一致性,或者更新依赖到兼容的最新版本。
  4. 文件系统差异

    • 不同的文件系统在大小写敏感性、Unicode支持等方面可能有所不同。
    • 解决方案:编写代码时考虑这些差异,避免硬编码路径或文件名。

通过以上措施,可以显著提高NodeJs项目的跨系统兼容性。

回到顶部