MacOS下如何在package.json中配置多命令启动脚本?
解决MacOS下Node.js项目start-dev脚本的问题
我来帮你搞定这个迁移的问题~首先得理清Windows和MacOS Shell命令的几个关键差异,然后调整脚本写法:
问题根源
你的原Windows脚本用了set来设置环境变量,而且引号转义是适配Windows cmd的,但MacOS用的是bash/zsh这类Unix Shell,语法规则不一样,加上你之前的尝试里还缺了命令分隔符&&和闭合引号,导致Shell解析出错。
MacOS专属的正确写法
你可以用下面两种写法中的任意一种:
写法1:调整引号和环境变量顺序
"start-dev": "nodemon --exec \"cd ./src && NODE_ENV=development babel-node server.js\""
这里把cd ./src提前,然后用&&分隔命令,环境变量直接用NODE_ENV=development的Unix风格写法,同时正确转义外层的双引号。
写法2:用单引号包裹内部命令(更简洁)
"start-dev": "nodemon --exec 'cd ./src && NODE_ENV=development babel-node server.js'"
Unix Shell里单引号可以直接包裹包含&&的命令,不需要转义,这样写法更清爽。
跨平台优化方案(推荐)
如果不想维护两个系统的脚本,可以用cross-env这个包,它能让环境变量设置在Windows和Unix系统下都生效:
- 先安装依赖:
yarn add cross-env --dev
- 修改脚本为:
"start-dev": "nodemon --exec \"cross-env NODE_ENV=development cd ./src && babel-node server.js\""
这样不管是Windows还是MacOS,运行yarn start-dev都能正常工作啦。
为什么你之前的尝试失败?
你写的"nodemon --exec \"NODE_ENV=development cd ./src babel-node server.js"有两个问题:
- 缺少命令分隔符
&&,Shell会把NODE_ENV=development、cd ./src、babel-node server.js当成一个命令的参数,而不是三个依次执行的命令 - 没有闭合最后的双引号,导致Shell报错
unexpected EOF while looking for matching "\""
内容的提问来源于stack exchange,提问作者Mendes
相关产品推荐
相关产品推荐

