无法为我的npm包创建bin可执行文件

r55awzrz  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(127)

依据:
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进行本地测试时的问题(或者每次更新版本)。

我错过了什么?

41zrol4v

41zrol4v1#

您可以使用npm exec命令来执行位于node_modules/.bin中的可执行文件:

npm exec my-exe

字符串
解释
当你使用npm my-exe时,npm假设你正在尝试执行一个名为my-exe子命令,而不是一个同名的可执行文件,因此它会显示以下警告:

Unknown command: "my-exe"

To see a list of supported npm commands, run:
  npm help

相关问题