我需要创建自己的 npx 库。一切正常...但仅使用预安装的软件包:
npm i -g pkg
npx pkg some args
如果你只是输入npx pkg some args,本着npx create-react-app,那么它会要求你安装包,然后抛出一个错误:
"pkg" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
lib/index.js
#!/usr/bin/env node
console.log(process.argv.slice(2).join(' ')); // упрощено до предела, т.к. сам код рабочий
package.json
{
// name, version, description, keywords и проч. сгенерированы анкеткой
"main": "lib/index.js"
"bin": {
"pkg": "lib/index.js" // сюда можно хоть `abrakadabra` вставить: всё равно не работает
},
"scripts": {
// build скрипты
"prepare": "del /q lib && npm run build",
"prestart": "npm run build",
"start": "node lib/index"
},
"dependencies": {
"@types/node": "^14.14.0",
"@typescript-eslint/parser": "^4.22.0",
"typescript": "^4.2.0"
}
}
我查看了其他存储库,例如我自己create-react-app和cowsay,但没有发现任何根本差异。
实际上,问题是:如何纠正这种误解
我在 Windows 上写,#!usr/bin/env它看起来像某种 Unix 主题,也许是这样?
这是一个非常有趣的错误:您只需要清除缓存。
爬进 npx 源代码,我意识到缓存是一个优先事项,版本是否更新无关紧要。我进入了我的缓存(找出缓存,运行
npm config get cache(我也从源代码中了解了这一点))并且在我用来安装包的进程的十六进制中有带有 PID 名称的文件夹(很清楚我在哪里找到的关于这个)。有create-react-app, 和cowsay, 和 minepkg,我package.json没有在文件中指定bin,这就是为什么相应的文件夹没有出现,这就是cmd.exe它找不到可执行文件的原因,这就是为什么它给我这个奇怪的错误。清除缓存后,我强制 npx 再次安装包 - 现在它可以工作了。更简短地说。在旧版本中,
pkg我没有指定bin它,所以它被保存在缓存中,即使更新版本也不想离开那里,并且 npx 缓存是优先考虑的。我不得不强迫他离开那里(在Shift+的帮助下Delete)。而且您不需要更改任何内容
package.json,不需要任何快捷方式,无需自行添加dependencies,只需清除缓存即可。而且它没有更新的事实,我认为是一个明显的错误。我会写一个问题,是的,存储库已存档。