0

我创建了一个简单的 CLI 来使用查询器引导项目,并已成功将其发布到 NPM。但是,当安装它时

npm i -g noobject

它已成功加载和安装。跑步时

noobject

在 cmd 行中,它确实返回“找不到命令”并且在运行时

npx noobject its returning the following.
npm ERR! could not determine executable to run

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Me\AppData\Local\npm-cache\_logs\2022-02-13T17_28_00_374Z-debug-0.log

我在 Windows 10 和 linux ubuntu 20.4 上都试过了。这是我的 index.js:https ://sourceb.in/ZGZMWKU8tb

#! /usr/bin/env node
const inquirer = require("inquirer");
const fs = require("fs");

// FULL SOURCE TREE: https://github.com/vKxni/noobject

const CURR_DIR = process.cwd();
const CHOICES = fs.readdirSync(`${__dirname}/templates`);

// Questions asked to the User
const QUESTIONS = [
  {
    name: "project-choice",
    type: "list",
    message: "What project would you like to generate?",
    choices: CHOICES,
  },
  {
    name: "project-name",
    type: "input",
    message: "Project name:",
    validate: (input) => {
      if (/^([A-Za-z\-\_\d])+$/.test(input)) return true;
      else
        return "Project name may only include letters, numbers, underscores and hashes.";
    },
  },
];

// Send a prompt to choose a template
inquirer.prompt(QUESTIONS).then((answers) => {
  const projectChoice = answers["project-choice"];
  const projectName = answers["project-name"];
  const templatePath = `${__dirname}/templates/${projectChoice}`;

  // Create the folder with the project name choosed by the user
  fs.mkdirSync(`${CURR_DIR}/${projectName}`);

  createDirectoryContents(templatePath, projectName);

  console.log(`✅ Successfully created ${projectName}`);
});

const createDirectoryContents = (templatePath, newProjectPath) => {
  const filesToCreate = fs.readdirSync(templatePath);

  filesToCreate.forEach((file) => {
    const origFilePath = `${templatePath}/${file}`;

    const stats = fs.statSync(origFilePath);

    if (stats.isFile()) {
      const contents = fs.readFileSync(origFilePath, "utf8");

      if (file === ".npmignore") file = ".gitignore";

      const writePath = `${CURR_DIR}/${newProjectPath}/${file}`;
      fs.writeFileSync(writePath, contents, "utf8");

      console.log(`⚠️ Created ${writePath}`);

    } else if (stats.isDirectory()) {
      fs.mkdirSync(`${CURR_DIR}/${newProjectPath}/${file}`);

      createDirectoryContents(
        `${templatePath}/${file}`,
        `${newProjectPath}/${file}`
      );
    }
  });
};

这是我的 package.json:

{
  "name": "noobject",
  "version": "1.2.8",
  "description": "Project generator written in NodeJS",
  "main": "index.js",
  "scripts": {
    "noobject": "node index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vKxni/noobject.git",
  "keywords": [
    "node",
    "generator",
    "project",
    "noobject"
  ],
  "author": "vKxni",
  "license": "ISC",
  "dependencies": {
    "inquirer": "^8.2.0"
  },
  "bin": {
    "noobject": "index.js"
  }
  }
}

(作为粘贴箱:https ://sourceb.in/CF4ydtNccG )。我希望任何人都可以帮助我,以便我可以更轻松、更快地引导项目和配置文件。

4

1 回答 1

1

你的问题是你缺少一个}for repository,所以bin实际上是 inside repository。你可以看到}倒数第二行有一个 double 。

{
  "name": "noobject",
  "version": "1.2.8",
  "description": "Project generator written in NodeJS",
  "main": "index.js",
  "scripts": {
    "noobject": "node index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vKxni/noobject.git",
  /* <----- should be here */
  "keywords": [
    "node",
    "generator",
    "project",
    "noobject"
  ],
  "author": "vKxni",
  "license": "ISC",
  "dependencies": {
    "inquirer": "^8.2.0"
  },
  "bin": {
    "noobject": "index.js"
  }
  } /* <----- wrong place! */
}

如果你修复它,它的工作原理:

{
  "name": "noobject",
  "version": "1.2.8",
  "description": "Project generator written in NodeJS",
  "main": "index.js",
  "scripts": {
    "noobject": "node index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vKxni/noobject.git",
  },
  "keywords": [
    "node",
    "generator",
    "project",
    "noobject"
  ],
  "author": "vKxni",
  "license": "ISC",
  "dependencies": {
    "inquirer": "^8.2.0"
  },
  "bin": {
    "noobject": "index.js"
  }
}
于 2022-02-13T19:49:06.350 回答