"npm run CMD" 不工作

"npm run CMD" not working

我可能是 "npm numpty" 但我无法弄清楚为什么当我输入时:

tslint --force --format verbose \"src/**/*.ts\"

它工作正常但是当我输入时:

npm run lint

我的 package.json 包括:

  "scripts": {
    "clean": "rimraf lib",
    "lint": "tslint --force --format verbose \"src/**/*.ts\"",
    "build": "npm run clean && npm run lint && echo Using TypeScript && tsc --version && tsc --pretty",
    "test": "npm run build && mocha --compilers ts:ts-node/register --recursive test/**/*-spec.ts",
    "watch": "npm run build -- --watch",
    "watch:test": "npm run test -- --watch"
  },

我收到以下错误:

module.js:471 throw err; ^

Error: Cannot find module './test/parse' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object. (/Volumes/PEGASUS/repos/mine/logger/serverless-event/node_modules/tslint/lib/test.js:10:13) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3)

我还查看了 npm-debug.log 文件,其中包括:

23 error Tell the author that this fails on your system:
23 error     tslint --force --format verbose "src/**/*.ts"

当然那个精确的命令 不会失败 这就是我遇到的全部问题。


值得注意的是,我确实看到了这个听起来类似的问题 -- npm run cmd fails while cmd on command line works -- 但讨论的解决方案对我遇到的错误没有影响。


另外请注意,我目前没有 linting 错误、警告或任何我期望的 return 错误状态。

混淆可能是因为 npm 脚本添加到您的 PATH,包括 ./node_modules/.bin。这意味着当您在 package.json 中使用 tslint 时,您引用的是 node_modules 中本地安装的版本,而当您直接使用 tslint 时,您使用的是全局版本安装的版本。似乎只有全局安装的版本在工作。

您可以通过在命令行中明确指定路径来确认这一点,即 运行 ./node_modules/.bin/tslint --force --format verbose \"src/**/*.ts\"。这直接使用 node_modules 版本,并且应该给你与你的 NPM 脚本看到的相同的失败结果。

但这并不能解决您的根本问题。听起来你本地安装的 tslint 找不到它使用的文件,虽然我不知道为什么。除非有明显的原因,否则我认为最快的解决方案可能是删除您的 node_modules 文件夹并再次 npm install,以下载一个新的工作版本。

全新安装的 tslint 及其所有依赖项应该能够成功加载其所有依赖项,您应该不会看到这些问题。如果它不能那么你可能有一个错误要用 tslint 提交。