如何在 macOS 上解決安裝 Node `canvas` 的問題

我想使用Node.js的canvas NPM包,但是執行npm install canvas會出現以下錯誤訊息: npm ERR! code 1 npm ERR! path /Users/flaviocopes/dev/old/generate-images-posts/node\_modules/canvas npm ERR! command failed npm ERR! command sh -c node-pre-gyp install --fallback-to-build npm ERR! Failed to execute '/opt/homebrew/Cellar/[[email protected]](/cdn-cgi/l/email-protection)/16.14.2/bin/node /opt/homebrew/Cellar/[[email protected]](/cdn-cgi/l/email-protection)/16.14.2/lib/node\_modules/npm/node\_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/Users/flaviocopes/dev/old/generate-images-posts/node\_modules/canvas/build/Release/canvas.node --module\_name=canvas --module\_path=/Users/flaviocopes/dev/old/generate-images-posts/node\_modules/canvas/build/Release --napi\_version=8 --node\_abi\_napi=napi --napi\_build\_version=0 --node\_napi\_label=node-v93' (1) npm ERR! node-pre-gyp info it worked if it ends with ok npm ERR! node-pre-gyp info using [[email protected]](/cdn-cgi/l/email-protection) npm ERR! node-pre-gyp info using [[email protected]](/cdn-cgi/l/email-protection) | darwin | arm64 npm ERR!...

如何在 Netlify Functions 中使用 npm 套件

在您的專案根目錄下初始化一個 package.json 檔案: npm init -y 然後安裝您所需要的 npm 套件,例如: npm install axios 這會建立一個 node_modules 資料夾和一個 package-lock.json 檔案。請將它們一起提交至您希望部署的程式庫(是的,您需要將 node_modules 的內容添加到程式庫中,請儘可能保持依賴數量的少)。 這樣就完成了。您現在可以在您的 Netlify Functions 中使用 require() 來存取這些 npm 套件。

如何在Node.js中使用MongoDB

在本教程中,我將向您展示如何從Node.js與MongoDB數據庫進行互動。 如果您對MongoDB不熟悉,請查閱我們的基礎指南,以及如何安裝和使用它的指南:) 我們將使用官方的mongodb npm套件。如果您已經有一個正在進行中的Node.js項目,可以使用以下命令來安裝它: npm install mongodb 如果您從頭開始,請在終端中創建一個新的文件夾,然後運行npm init -y來啟動新的Node.js項目,然後運行npm install mongodb命令。 連接到MongoDB 您需要引入mongodb套件,然後從中獲取MongoClient對象。 const mongo = require('mongodb').MongoClient 創建MongoDB服務器的URL。如果您在本地使用MongoDB,URL將是類似mongodb://localhost:27017的形式,因為27017是默認端口。 const url = 'mongodb://localhost:27017' 然後使用mongo.connect()方法來獲取對MongoDB實例客戶端的引用。 mongo.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) { console.error(err) return } // ... }) 現在,您可以使用client.db()方法選擇數據庫。 const db = client.db('kennel') 創建並獲取集合 您可以使用db.collection()方法獲取集合。如果集合還不存在,它將被創建。 const collection = db.collection('dogs') 向集合插入數據 在app.js中添加以下函數,它使用insertOne()方法將一個對象添加到dogs集合中。 collection.insertOne({name: 'Roger'}, (err, result) => { }) 您可以使用insertMany()來添加多個項目,將數組作為第一個參數傳入。 collection.insertMany([{name: 'Togo'}, {name: 'Syd'}], (err, result) => { }) 查找所有文檔 使用集合上的find()方法來獲取添加到集合中的所有文檔。...

如何在本地測試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')

如何更新位於子資料夾中的多個專案中的所有 npm 套件

我使用了以下的 Shell 腳本: #!/bin/bash for dir in \*/; do cd "$dir" if [ -f package.json ]; then rm -rf node\_modules npx ncu -u npm update fi cd .. done

如何移除所有的 node_modules 資料夾內容

通過刪除舊的 Node 模塊節省空間 我需要將一個充滿舊項目的資料夾轉移到一台新的電腦上,並在壓縮該資料夾後,我發現它的大小為8GB。對於僅包含文本文件的某些程式項目來說,這有點太大了。 這些都是 JavaScript 項目,並且每個項目都包含一個名為 node_modules 的資料夾。 這些資料夾完全是不必要的,因為我始終可以在項目中運行 npm install 重新生成它們,而且大部分我在那個資料夾中的項目都是我永遠不會再使用的舊東西。 所以我決定刪除所有的 node_modules 資料夾,但是他們太多了。所以我進入了父資料夾,我將其稱為 dev,然後在 ZSH 終端中(這是 macOS Catalina 默認的 shell)運行了以下命令: find . -name "node_modules" -type d -prune -exec rm -rf '{}' + 這將我的資料夾大小從8GB減少到了2GB。對於一行命令來說,效果還不錯。 我在這篇博客上找到了這個命令,你可以在那裡找到更多對命令細節的解釋。

應該在 Git 中提交 node_modules 文件夾嗎?

這是一個很好的問題。有利有弊。我討論這個話題,讓您可以對此做出自己的意見。 應該在 Git 中提交 node_modules 文件夾嗎? 我提到了 Git,但同樣的原則也適用於您所使用的任何版本控制系統。 這是一個很好的問題。有利有弊。 我建議的默認選擇是不提交 node_modules 文件夾,而是將其添加到您的.gitignore文件中。 您可能有特殊的需求,反過來改變這個決定。 我討論這個話題,讓您可以對此做出自己的意見。 以下是不提交 node_modules 的一些論點: 您可以保持 Git 歷史純淨。當您添加新的套件時,您只需存儲package.json和package-lock.json文件的更改。當您決定更新套件版本時,只需存儲package-lock.json的文件更改。 package-lock.json是 npm 的一個相對較新的功能,它取代了以前使用的“shrinkwrap”命令。 您避免將數百MB的依賴項放入您的存儲庫中,這意味著隨著時間的推移,工作速度將更快。切換分支和檢出代碼是受存儲庫大小影響很大的2個操作。 在使用分支時,您可能會遇到超出您的代碼範圍的合併衝突,而是涉及依賴代碼。這對您處理來說並不好,可能會浪費很多時間。避免提交更改依賴項後的合併請求或合併操作,將有更多的文件涉及到這個過程。工具變得更慢,甚至可能決定不顯示完整的差異(例如 GitHub)。 如果您在部署到與開發機器不同的平台時(常見情況是在 Mac 上開發,在 Linux 上部署),需要重新編譯原生的 Node 模塊。您需要調用npm rebuild,這會使服務器與開發機器不同步。 不提交 node_modules 意味著您需要將所有模塊列在package.json(和package-lock.json)中,這是必須的步驟。這很好,因為您可能不會很注意這樣做,如果您不這樣做,某些 npm 操作可能會出錯。 提示:在package.json文件中不需要使用具體版本,自從引入了package-lock.json文件以後不再需要了。 如果您使用單獨的dependencies和devDependencies集合,通過提交node_modules文件夾,您基本上提交了devDependencies,而生產構建無法(輕易)去除它們。 可能會導致您提交 node_modules 的原因,以及如何解決它們: npm套件可能被其作者從 npm 注冊表中刪除。在 2016 年發生過著名的left-pad事件(了解更多)。這在受歡迎的套件中非常少見。如果發生這種情況,您可能無法再使用那個特定的功能。 您還可以主張npm不能保證無限期存在,它可能會消失,所以確保將完整的代碼與您的應用程序一起提交,是確保將來擁有的一種簡單方法。 每次使用套件時,在 GitHub 上創建一個 fork。偶爾保持它與原始庫同步(可以自動化)。 這在某些情況下並不實用,因為套件可能有數十個它們自己的依賴項。 您可以為項目使用私有存儲庫服務器,並將其用於托管所有依賴項。 選項包括: sinopia npm_lazy npm-lazy-mirror artifactory npm Enterprise(來自 npm 公司) 提交依賴項的另一個原因是能夠快速編輯代碼,如果您發現錯誤或者想要向庫添加某些內容。 這是一把雙刃劍:如果這樣做,您就失去了升級套件的能力,如果有新版本發布,這只對於快速的臨時修復有好處。 最佳的解決方案是要麼向原始項目提交要求的 PR,要麼 fork 它並將您的 fork 用作依賴項。

查找已安裝的 npm 套件版本

如何查找您的應用程式中特定套件的版本 要查看已安裝的所有 npm 套件的最新版本,包括它們的相依套件: npm list 範例: ❯ npm list /Users/flavio/dev/node/cowsay └─┬ [[email protected]](/cdn-cgi/l/email-protection) ├── [[email protected]](/cdn-cgi/l/email-protection) ├─┬ [[email protected]](/cdn-cgi/l/email-protection) │ ├── [[email protected]](/cdn-cgi/l/email-protection) │ └── [[email protected]](/cdn-cgi/l/email-protection) ├─┬ [[email protected]](/cdn-cgi/l/email-protection) │ ├── [[email protected]](/cdn-cgi/l/email-protection) │ └─┬ [[email protected]](/cdn-cgi/l/email-protection) │ └── [[email protected]](/cdn-cgi/l/email-protection) └── [[email protected]](/cdn-cgi/l/email-protection) 您也可以直接打開 package-lock.json 檔案,但這涉及一些目視掃描。 npm list -g 的效果相同,但作用於全域安裝的套件。 要僅獲取頂級套件(基本上就是您告訴 npm 要安裝的套件,並在 package.json 中列出的那些套件),執行 npm list --depth=0: ❯ npm list --depth=0 /Users/flavio/dev/node/cowsay └── [[email protected]](/cdn-cgi/l/email-protection) 您可以通過指定名稱來獲取特定套件的版本:...

简介:npm包管理器

快速指南到npm,这是Node.js成功的重要组成部分。截至2017年1月,npm注册表中已有超过35万个软件包,使它成为地球上最大的单一语言代码仓库,你可以确信几乎任何东西都可以找到一个软件包。 介绍npm 安装 如何使用npm 安装所有依赖项 安装单个软件包 更新软件包 版本控制 运行任务 介绍npm npm是Node.js的标准包管理器。 截至2017年1月,npm注册表中已有超过35万个软件包,使它成为地球上最大的单一语言代码仓库,你可以确信几乎任何东西都可以找到一个软件包。 它最初是用于下载和管理Node.js软件包的依赖项,但现在也被用于前端JavaScript。 npm有许多功能。 Yarn是npm的一个替代方案,请确保也了解一下它。 安装 安装Node.js时也会安装npm。请前往https://nodejs.org安装Node,如果你还没有在系统上安装过它。 如何使用npm npm管理项目的所有依赖项的下载。 安装所有依赖项 如果项目有一个packages.json文件,在命令行中运行以下命令即可安装项目所需的所有依赖项: npm install 它将在node_modules文件夹中安装所有依赖项,并在需要时创建该文件夹。 安装单个软件包 你也可以通过以下命令安装一个特定的软件包: npm install <package-name> 通常会在此命令中添加更多标志: --save 将软件包安装并添加到package.json文件的dependencies中(从 npm 5 开始,此为默认行为)。 --save-dev 将软件包安装并添加到package.json文件的devDependencies中。 两者的区别主要在于,devDependencies通常用于开发工具,比如测试库,而dependencies会在生产环境中与应用程序一起打包。 更新软件包 更新软件包也很容易,只需运行以下命令: npm update npm会检查所有软件包,找到满足版本控制条件的较新版本。 你也可以指定更新某个特定软件包: npm update <package-name> 版本控制 除了下载功能,npm还可以管理版本控制,你可以指定软件包的任何特定版本,或要求高于或低于所需版本。 许多时候,你会发现某个库只与另一个库的主要版本兼容。 或者,最新版本中的一个未修复的错误导致了问题。 指定库的显式版本还有助于使每个人都使用完全相同的软件包版本,直到更新package.json文件为止。 在所有这些情况下,版本控制都很有帮助,npm遵循语义版本控制(semver)标准。 运行任务 package.json文件支持一种格式,用于指定可以使用以下命令运行的命令行任务: npm run <task-name> 例如: { "scripts": { "start-dev": "node lib/server-development", "start": "node lib/server-production" }, } 很常见使用此功能来运行Webpack:...