首页 文章

节点脚本可执行文件在Mac上不起作用:env:node \ r:没有这样的文件或目录

提问于
浏览
8

我创建了我的节点脚本可执行文件来执行一些任务grunt . 在Windows上,我的节点脚本工作正常 . 但是在Mac OS X(Yosemite)上,它不起作用 .

我的节点脚本已在Windows上发布 .

我的节点脚本是通过npm命令安装的:

npm install -g task-app

我的节点脚本有第一行:

#! /usr/bin/env node

我尝试了很多解决方案来解决我的问题,但我仍然陷入困境 .

以下是我使用的这些解决方案:

  • 卸载并重新安装Node.js.

  • 执行此命令为节点创建链接:sudo ln -s / usr / bin / nodejs / usr / local / bin / node

  • 使用此命令设置我的路径:export PATH = $ PATH:/ usr / local / bin / node

你有其他解决方案吗?

EDIT :

我的脚本的开头:

#! /usr/bin/env node

var grunt = require('grunt');

//Get parameters from command line
var args = process.argv.splice(2);

[...]

5 回答

  • 6

    毕竟,我找到了解决问题的方法 .

    由于我的节点脚本文件已在Windows上创建,因此该文件为DOS格式(我认为是DOS格式的行结尾) . 所以,我使用了一个允许将文件转换为unix格式的模块:

    brew install dos2unix
    sudo dos2unix /usr/local/lib/node_modules/task-app/src/task-app.js
    
  • 0

    你也可以使用vim:

    vim script
    
    :se ff=unix
    :wq
    

    这将确认Unix风格换行符的DOS风格新行 .

  • 24

    脚本中的换行符存在问题 . 确保 #!/usr/bin/env node 后跟 \n (unix样式)而不是 \r\n (windows / dos样式) . 要解决此问题,请使用 tr 命令从文件中删除 \r

    cat your_script.js | tr -d '\r' > fixed_script.js
    
  • 0

    正如PauloDev上面所说,这是一个Mac / Windows系列结束问题 . 详细说明一下,如果你使用 nvm ,你'll need to locate your script first (in my case I' m使用 express-mvc-generator ):

    # install dos2unix
    brew install dos2unix
    
    # output the full path of your node version
    which node 
    >> /Users/owmundy/.nvm/versions/node/v8.0.0/bin/node
    
    # confirm the file path
    cat /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express
    
    # convert the line endings
    sudo dos2unix /Users/<username>/.nvm/versions/node/v8.0.0/lib/node_modules/express-mvc-generator/bin/express
    
    # then run your script
    
  • 8

    这应该不再是一个问题,因为npm@^5.4.0 . npm现在将自动转换为正确的行结尾 . 见https://github.com/npm/npm/issues/12371 .

    然而,这仍然是纱线的一个问题:https://github.com/yarnpkg/yarn/issues/5480 .

    如果你来到这个页面是因为你在使用纱线代替npm时遇到了这个错误,就像我一样,你可能会考虑使用npm而不是纱线 . 无论如何,无论如何,npm拥有纱线最好的功能(可以说是) .

相关问题