使用Knex v2.4.0执行数据库迁移脚本时出现env: node\r: No such file or directory错误
Knex v2.4.0执行数据库迁移脚本时出现env: node\r: No such file or directory错误
遇到这个问题我太熟悉了!这个错误本质上是换行符不兼容导致的——Unix/Linux/macOS系统会把Windows风格的\r\n换行符里的\r当成命令的一部分,所以才会找不到node\r这个不存在的命令。结合你说低版本Knex正常、新版本出问题的情况,大概率是新版本Knex的脚本文件在打包或发布时带入了Windows换行符,或者你的项目环境在安装依赖时出现了换行符污染。
给你几个实用的解决办法:
转换Knex脚本的换行符
找到项目里node_modules/knex/bin/knex.js这个文件,把它的换行符从Windows风格的CRLF改成Unix风格的LF。你可以用VS Code打开文件,点击右下角的换行符标识切换,或者用dos2unix命令直接处理:dos2unix node_modules/knex/bin/knex.js改完后再尝试执行
npx knex migrate:latest应该就能正常运行了。清理并重新安装依赖
有时候依赖安装过程中会因为环境差异引入奇怪的格式问题,彻底清理后重装能解决不少这类问题:- 删除
node_modules文件夹和package-lock.json(或yarn.lock)文件 - 重新执行
npm install(或yarn install) - 再次尝试迁移命令
- 删除
检查npm的脚本配置
如果是macOS或Linux系统,确保npm使用的shell是兼容的,你可以尝试设置:npm config set script-shell /bin/bash之后再执行迁移命令试试。
备注:内容来源于stack exchange,提问作者Vaishnavi
相关产品推荐
相关产品推荐

