npm 可以在父文件夹中安裝套件

了解如何解決使用 npm 安裝套件時可能遇到的問題 我在我的編程訓練營中遇到一些學生遇到了這個問題,這是我從未注意到的。 這是由於在空文件夾中安裝套件時 npm 的行為所導致的。 我建議使用 npm install <套件名稱> 來安裝套件,比如: npm install my-prime 在一個空文件夾中安裝。 默認情況下,這會創建一個 package.json 文件,將套件作為依賴添加到其中,創建一個 package-lock.json 文件,並將套件安裝在 node_modules 文件夾中。 但是有一些人沒有看到這種情況發生。似乎什麼都沒發生。 事實上發生的是,他們在父文件夾中有一個 package.json 文件和一個 node_modules 文件夾。 也許不僅僅在父文件夾中,而是在更高的文件夾層級中。 也許他們在家目錄下運行了 npm install <套件> 但沒有意識到,可能是為了測試。 npm 會遍歷整個文件夾樹,檢查是否存在包含 package.json 文件或 node_modules 文件夾的文件夾。如果找到這樣的文件夾,則該文件夾將被視為運行 npm 命令的「當前目錄」。 來源 要解決這個問題,最好的解決方法是刪除父文件夾中的 package.json 和 node_modules 文件夾。 這可能是一個錯誤。 另外,您還可以在文件夾中運行 npm init -y 命令,以創建一個空白的 package.json 文件,然後重新運行 npm install <套件> 命令,這時將會按預期運行。

npm-install-previous-package-version

安裝舊版的 npm 套件 學習如何安裝舊版的 npm 套件,這將有助於解決相容性問題。 使用 @ 語法可以安裝舊版的 npm 套件: npm install <package>@<version> 範例: npm install cowsay 安裝 1.3.1 版本(此文章撰寫時)。 使用以下方式安裝 1.2.0 版本: npm install [[email protected]](/cdn-cgi/l/email-protection) 全域套件亦可使用相同方式安裝: npm install -g [[email protected]](/cdn-cgi/l/email-protection) 您可能也有興趣列出套件的所有舊版。可以使用 npm view <package> versions 命令來實現: ❯ npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ]

在Node中从命令行接受输入

如何使用内置的readline Node模块使Node.js CLI程序具有交互性 如何使Node.js CLI程序具有交互性? Node自版本7开始提供了readline模块,可以实现从可读流(比如process.stdin流,它在Node程序执行期间是终端输入)逐行获取输入。 const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }) readline.question(`What's your name?`, (name) => { console.log(`Hi ${name}!`) readline.close() }) 这段代码会询问用户名,一旦文本被输入,并且用户按下回车键,我们会发送一条问候语。 question()方法会展示第一个参数(一个问题),并且等待用户输入。一旦按下回车键,它会调用回调函数。 在这个回调函数中,我们关闭了readline接口。 readline还提供了其他几个方法,我会让你自己在我上面提供的包文档中去查阅。 如果你需要输入密码,最好不要将其回显,而是显示为*符号。 最简单的方法是使用readline-sync包,它在API方面与上述方法非常相似,并且直接处理了这个问题。 一个更完整和抽象的解决方案则是由Inquirer.js包提供。 你可以使用npm install inquirer进行安装,然后你可以像这样重现上面的代码: const inquirer = require('inquirer') var questions = [{ type: 'input', name: 'name', message: "What's your name?", }] inquirer.prompt(questions).then(answers => { console.log(`Hi ${answers['name']}!`) }) Inquirer.js可以让你做很多事情,比如提问多个选择、使用单选按钮、确认等等。 值得知道所有的选择,尤其是Node提供的内置选择,但如果你计划将CLI输入推向一个新的层次,Inquirer.js是一个优秀的选择。

如何在本地測試npm套件

如果您想開發自己的npm套件,首先必須在本地測試它。 我在一個我希望模組化的專案中遇到了這個需求。 我建了一個名為flaviocopes-common-database的套件作為示例。 我在套件中添加了一個package.json檔案,該檔案包含了模組名稱在name屬性中,以及一些依賴項: { "name": "flaviocopes-common-database", "version": "1.0.0", "description": "", "main": "index.js", "dependencies": { "pg": "^8.0.2", "sequelize": "^5.21.6" } } 然後我執行了 npm link 這會在系統的/usr/local/lib/node_modules/資料夾中創建一個符號連結,該資料夾包含全域安裝的npm套件,即使用npm -g安裝的套件。 我有以下連結 /usr/local/lib/node\_modules/flaviocopes-common-database 指向我本地的檔案 /Users/flavio/dev/code/flaviocopes-common-database 現在在另一個專案中,我想使用這個模組,所以我執行了 npm link flaviocopes-common-database 然後我可以使用常見的require()語法在Node.js代碼中引入它: const database = require('flaviocopes-common-database')