依据:
https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin
我正在尝试为我的npm包创建一个“二进制”。我的package.json
看起来像这样:
{
"name": "@internal/my-exe",
"version": "0.0.0",
"type": "commonjs",
"bin": {
"my-exe": "./dist/src/index.js"
},
"files": [
"dist",
"README.md"
],
"scripts": {
"build": "tsc --project tsconfig.build.json",
"ts-node": "ts-node"
},
"dependencies": {
"tslib": "^2.3.0"
},
"devDependencies": {
"ts-jest": "^29.1.0",
"ts-node": "^10.9.1",
"typescript": "^5.0.4"
},
"engines": {
"node": ">=18"
},
"volta": {
"node": "18.16.1"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
}
}
字符串
和项目(包括构建输出/dist):
my-exe
dist/
-> src/
-> index.js
-> index.d.ts
src/
-> index.ts
package.json
tsconfig.json
tsconfig.build.json
型
和src/index.ts:
#!/usr/bin/env node
// eslint-disable-next-line node/shebang
export * from './src/index';
型
我在本地构建并打包了上面的代码:
npm run build
npm pack
型
所以我现在有:
my-exe
dist/
...
internal-my-exe-0.0.0.tgz
package.json
型
在另一个测试项目中,我测试我可以安装/运行上面的“二进制”:
{
"name": "test-app",
"version": "1.0.0",
"main": "index.js",
"devDependencies": {
"ts-node": "^10.9.2",
"typescript": "^5.3.3"
},
"engines": {
"node": ">=18"
},
"volta": {
"node": "18.16.1"
},
"dependencies": {
"@internal/my-exe": "file:../../../my-exe/internal-my-exe-0.0.0.tgz"
}
}
型
使用:
cd test-app
npm i
型
现在有:
test-app
node_modules/
-> .bin/
-> my-exe
型
所以看起来很棒。但是当我试着运行它的时候:
cd test-app
npm my-exe
型
我只得到:
Unknown command: "my-exe"
To see a list of supported npm commands, run:
npm help
型
如果我这样做:
cat test-app/node_modules/.bin/my-exe
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
tslib_1.__exportStar(require("./src/index"), exports);
型
因此,似乎它删除了#!/usr/bin/env node
安装时,但不确定是否有问题。
更新:上述问题是一个npm缓存“问题”,因此在~/.npm中删除该高速缓存并删除包锁定文件可以修复使用npm pack进行本地测试时的问题(或者每次更新版本)。
我错过了什么?
1条答案
按热度按时间41zrol4v1#
您可以使用
npm exec
命令来执行位于node_modules/.bin
中的可执行文件:字符串
解释
当你使用
npm my-exe
时,npm假设你正在尝试执行一个名为my-exe
的子命令,而不是一个同名的可执行文件,因此它会显示以下警告:型