"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 提交。
我可能是 "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 提交。