鍍金池/ 問(wèn)答/Linux  HTML/ npm run scripts 腳本在mac上正常執(zhí)行,但是windows下不能

npm run scripts 腳本在mac上正常執(zhí)行,但是windows下不能正常執(zhí)行,后發(fā)現(xiàn)是環(huán)境問(wèn)題,為什么會(huì)這樣

直接上手package.json文件的代碼。

  "scripts": {
    "watch": "../scripts/watch.js --watch",
  },

當(dāng)我在命令行執(zhí)行npm run watch的時(shí)候,在mac下正常,但是在windows下就報(bào)錯(cuò)。

windows 報(bào)錯(cuò)信息

    > ./scripts/watch.js --watch

'.' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
或批處理文件。
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! aaaaa-wxapp@1.0.0 watch: `./scripts/watch.js --watch`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the aaaaa-wxapp@1.0.0 watch script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\29656\AppData\Roaming\npm-cache\_logs\2018-02-24T03_30_38_264Z-debug.log

但是經(jīng)過(guò)修改之后,我發(fā)現(xiàn)是執(zhí)行環(huán)境的問(wèn)題

windows 修改之后的代碼

  "scripts": {
    "watch": "node ../scripts/watch.js --watch",
  },

在windows環(huán)境下,執(zhí)行npm run watch能正常執(zhí)行了。
因?yàn)樵趐ackage.json中明確定義了,腳本執(zhí)行環(huán)境是node下執(zhí)行,但是我想知道為什么要這樣,是什么問(wèn)題造成了我們必須在windows下這樣寫呢。

回答
編輯回答
別傷我

package.json里的scripts實(shí)際上就是在執(zhí)行bash(unix)和cmd(windows)命令, 只不過(guò)會(huì)先把./node_modules/bin/先加到PATH里

在cmd里目錄層級(jí)是用\分割的, 所以執(zhí)行./scripts/watch.js --watch時(shí)并不能把前面的部分識(shí)別為一個(gè)文件

但如果你使用.\scripts\watch.js --watch的話會(huì)啟動(dòng)js文件的默認(rèn)打開(kāi)程序來(lái)打開(kāi)這個(gè)文件而非執(zhí)行

在類unix系統(tǒng)則可以通過(guò)hashbang語(yǔ)法來(lái)指定執(zhí)行程序所以不會(huì)出問(wèn)題

用node來(lái)執(zhí)行的話文件名只是一個(gè)參數(shù), 如何解析取決于node的實(shí)現(xiàn), 而不是cmd或bash

2018年7月31日 17:42
編輯回答
浪婳

npm scripts相當(dāng)于命令行代碼的別名
`

"scripts": {
    "watch": "../scripts/watch.js --watch",
},

`
watch命令不是可執(zhí)行的命令,所以執(zhí)行的時(shí)候會(huì)報(bào)錯(cuò),至于為什么在mac上正常執(zhí)行,我也不清楚,窮鬼沒(méi)有Mac。

2017年5月27日 01:27
編輯回答
款爺

windows路徑里面沒(méi)有 .. 這樣的用法

2017年8月9日 23:28
編輯回答
扯不斷

因?yàn)?... 是 Unix 平臺(tái)的兩個(gè)目錄鏈接,而 Windows 上的 cmd 不支持。你可以用 Powershell 執(zhí)行 npm 命令,它兼容 ...

2018年1月16日 12:17