什麼是 Node 模組中的對等依賴?

對 package.json 文件中的 peerDependencies 字段進行簡單解釋 在一些 package.json 文件中,你可能會看到以下幾行代碼: { //... "peerDependencies": { "libraryName": "1.x" } } 你可能已經看過 dependencies 和 devDependencies,但沒有看過 peerDependencies。 dependencies 是你的項目所依賴的包。 devDependencies 是在開發階段所需的包。比如測試框架像 Jest,或是其他像 Babel 或 ESLint 這樣的工具包。 在這兩種情況下,當你安裝一個包時,它的 dependencies 和 devDependencies 會被自動安裝。 然而,peerDependencies 不同。它們不會自動安裝。 當一個依賴被列為 peerDependency,它並不會自動安裝。相反,包含該包的程式碼必須將其列為自己的依賴。 如果你運行 npm install,但沒有找到這個依賴的話,npm 會給你一個警告。 舉個例子,假設包 a 包含依賴 b: a/package.json { //... "dependencies": { "b": "1.x" } } 包 b 又要求包 c 為其 peerDependency: b/package.json { //... "peerDependencies": { "c": "1.x" } } 在包 a 中,我們必須將 c 添加為依賴,否則當你安裝包 b 時,npm 會給出一個警告(並且代碼可能在運行時失敗):...

介紹Yarn

Yarn是一個JavaScript套件管理器,是npm的直接競爭對手之一,同時也是Facebook的開源項目之一。 Yarn介紹 安裝Yarn 管理套件 初始化新項目 安裝現有項目的依賴項 本地安裝套件 全局安裝套件 本地安裝開發依賴項 移除套件 檢查許可證 檢查依賴項 升級套件 如何升級Yarn Yarn介紹 Yarn是一個JavaScript套件管理器,是npm的直接競爭對手,也是Facebook的開源項目之一。 它與npm套件相容,因此它有一個重要的優勢,可以無縫取代npm。 在剛發布時,它由於並行下載和緩存,速度比npm快得多,但現在npm已經追趕上它的許多功能,所以我推薦使用npm。 工具最終會收斂到一組功能,以保持它們在相同水平上,以保持相關性,因此我們可能會在未來的npm中看到這些功能 - 競爭對象對用戶來說是好的。 安裝Yarn 雖然你可以使用npm安裝Yarn(npm install -g yarn),但Yarn團隊不建議這樣做。 系統特定的安裝方法在https://yarnpkg.com/en/docs/install列出。例如,在macOS上,你可以使用Homebrew運行以下命令: brew install yarn 但每個操作系統都有自己首選的包管理器,這將使安裝過程非常順暢。 最終,您將在您的shell中可以使用yarn命令: 管理套件 Yarn將其依賴項寫入名為package.json的文件中,該文件位於您的項目的根文件夾中,並將依賴項文件存儲到node_modules文件夾中,就像過去使用npm一樣。 初始化新項目 運行 yarn init 將啟動一個交互式提示,幫助您快速啟動一個項目。 安裝現有項目的依賴項 如果您已經有一個包含依賴項列表的package.json文件,但是尚未安裝套件,運行以下命令: yarn 或者 yarn install 開始安裝過程。 本地安裝套件 使用以下命令將套件安裝到項目中: yarn add package-name 全局安裝套件 yarn global add package-name 本地安裝開發依賴項 yarn add --dev package-name 相當於npm的--save-dev標誌 移除套件 yarn remove package-name 檢查許可證 在安裝許多依賴項時,這些依賴項可能還有很多依賴項,您會安裝許多您對其使用的許可證一無所知的套件。 Yarn提供了一個便利的工具,可以打印出您所有依賴項的許可證: yarn licenses ls 它還可以自動生成一個免責聲明,其中包含您使用的所有項目的所有許可證:...

使用 npm 的語意化版本控制

語意化版本控制是一種常用於版本編號的慣例。 在 Node.js 的封包中,有一個很好的事情就是大家都同意使用語意化版本控制。 語意化版本控制的概念很簡單:所有版本都有三個數字:x.y.z。 第一位數字是主要版本 第二位數字是次要版本 第三位數字是修補版本 當你進行新版本發布時,你不能隨意將數字遞增,而是需要遵守一些規則: 如果你進行了不兼容的 API 更改,則將主要版本遞增 如果你以向後相容的方式新增功能,則將次要版本遞增 如果你進行了向後相容的錯誤修復,則將修補版本遞增 這種慣例在各種程式語言中都被採用,並且對每個 npm 封包都很重要,因為整個系統都取決於此。 為什麼如此重要呢? 因為 npm 在我們運行 npm update 時,可以在 package.json 檔案 中使用一些規則來選擇要更新的版本。 這些規則使用以下符號: ^ ~ > >= < <= = - || 讓我們逐一了解這些規則: ^:如果你在運行 npm update 時輸入 ^0.13.0,它可以更新到修補版本和次要版本:0.13.1、0.14.0,以此類推。 ~:如果你在運行 npm update 時輸入 ~0.13.0,它只能更新到修補版本:0.13.1 是可以的,但 0.14.0 不行。 >:接受高於指定版本的任何版本 >=:接受等於或高於指定版本的任何版本 <=:接受等於或低於指定版本的任何版本 <:接受低於指定版本的任何版本 =:接受精確的版本 -:接受一個版本範圍。例如:2.1.0 - 2.6.2 ||:組合多個版本集合。例如:< 2.1 || > 2.6 您可以將某些符號組合在一起,例如使用 1.0.0 || >=1.1.0 <1.2.0,以使用 1.0.0 或從 1....

使用`npm uninstall`來卸載npm套件

如何卸載先前在本機或全域安裝的npm Node套件。 要卸載你先前本機安裝的套件(在node_modules資料夾中使用npm install <package-name>),請從專案根目錄中運行以下命令: npm uninstall <package-name> 這個操作同時會移除package.json檔案中的套件參考。 如果這個套件是開發依賴項,在package.json檔案的devDependencies中列出,你必須使用-D / --save-dev標誌來從檔案中刪除它: npm uninstall -D <package-name> 如果這個套件是全域安裝的,你需要添加-g / --global標誌: npm uninstall -g <package-name> 例如: npm uninstall -g webpack 你可以在系統上的任何位置運行這個命令,當前所在的資料夾並不重要。

創建 create-react-app 的介紹

create-react-app 是開始使用 React 應用的最簡單方法。 create-react-app 是一個旨在讓您快速掌握 React 的項目。它提供了一個現成的 React 應用程序起始器,讓您可以開始構建應用程序,而不必處理 Webpack 和 Babel 的配置。 它提供了以下功能: 具有熱重載的開發服務器 集成了 Jest 的測試環境 构建 React 應用程序的能力 兼容 ES6+ 語法 打包所有 JavaScript 和資源文件 包含 CSS 自動添加器、SASS 和 CSS Modules 支持 等等! 您可以通過使用 npx 開始使用,這是一種在不安裝命令的情況下下載和執行 Node.js 命令的簡單方法。npx 隨 npm 一起提供(自版本 5.2 起)。如果您尚未安裝 npm,請從 https://nodejs.org 安裝(npm 會隨 Node 一同安裝)。 如果您不確定自己的版本,我建議您檢查是否需要更新。 提示:如果您對終端機不熟悉,請查看我的終端機教程 https://flaviocopes.com/macos-terminal/。 當您運行 npx create-react-app <app-name> 時,npx 將下載最新的 create-react-app 版本,並運行它,然後將其從您的系統中刪除。這非常好,因為您的系統上永遠不會有過時的版本,每次運行該命令時,您都會獲得最新和最好的代碼。 讓我們開始: npx create-react-app todolist 執行完畢時的截圖: 這是執行完成後的截圖: create-react-app 在您指定的文件夾中(此例中為todolist)創建了文件結構,並初始化了 Git 存儲庫。...

在任意文件夾運行 Web 伺服器

您常常需要在系統中的特定文件夾中運行一個 Web 伺服器。 您沒有足夠時間來配置像 Apache 或 Nginx 這樣的正確的 Web 伺服器,因為這只是為了幾分鐘或測試您的應用。 那麼,該怎麼辦呢? 根據您喜歡的語言,您可能已經擁有所需的一切。 如果您使用 Node.js,並已經安裝了 npm,請運行以下命令: npm install -g http-server 然後在您想要透過伺服器公開的文件夾中運行 http-server。 默認情況下,它將在端口 8080 上啟動伺服器,但您可以使用 -p 標誌進行更改(運行 http-server --help 可查看更多選項)。 如果您使用 Python 並已安裝,只需運行以下命令: python -m SimpleHTTPServer 8080 (Python 2) 或者 python -m http.server 8080 (Python 3) 即可在本地端口 8080 上啟動一個本地伺服器。 如果您使用 PHP 並且運行一個現代版本,請運行以下命令: php -S localhost:8080

在文件夾中的任何文件變更時運行 package.json 腳本

本文將解釋如何在文件夾的文件變更時重新運行 package.json 腳本。 我的實際問題是:我希望在文件變更時自動重新生成 CSS,通過 PostCSS 流程進行處理。 我描述的方法將適用於任何類型的自動文件和文件夾監視,而不僅僅是這個特定情況。 我正在運行以下腳本,使用 yarn build:css 命令運行: "scripts": { "build:css": "postcss src/tailwind.css -o static/dist/tailwind.css", } 我希望在 layouts 文件夾中的任何變更發生時重新運行它,該文件夾包含構建我的網站的所有 HTML 文件。 如果您熟悉 Tailwind,它會創建一個稍大的 CSS 文件,其中包含您可能需要的所有內容,並且您可以通過刪除您不使用的任何類來進行優化。 每次我在其中進行更改時,我都希望重新生成 CSS,並觸發我在 PostCSS 設置中設置的清理和最小化過程。 如何實現這一點呢? 首先,安裝 watch npm 套件: npm install watch 然後在您的 package.json 文件中加入 watch 腳本。您已經有了之前的 build:css,我們只需添加一個監視 layouts 文件夾並在每次變更時運行 build:css 的腳本: "scripts": { "build:css": "postcss src/tailwind.css -o static/dist/tailwind.css", "watch": "watch 'npm run build:css' ./layouts" } 現在運行 npm run watch 或 yarn watch。

如何使用 Node 獲取圖片的寬度和高度

你需要知道圖片在文件系統中的位置。 如果是從互聯網獲取的圖片,你可以將它保存到系統的臨時文件夾。 然後安裝 image-size npm 模塊: npm install image-size 你可以像這樣使用它: import sizeOf from 'image-size' const { height, width } = sizeOf(fileLocation)

如何修復使用npm時出現的\"Missing write access\"錯誤

快速解決在使用npm安裝全局套件時遇到的煩人問題 當在Mac或Linux上第一次嘗試使用npm以npm install -g <package>的語法安裝全局套件時,您可能會遇到一個奇怪的錯誤,顯示類似以下的訊息: Missing write access to /usr/local/lib/node\_modules 或者是類似的訊息,後面還有一長串其它錯誤或警告訊息,這些都是第一個錯誤的結果。 這個錯誤阻止我們安裝套件。 要如何修復這個問題?這是一個權限錯誤,意味著您沒有對該資料夾的寫入權限。 以下是解決方法,運行以下的指令: sudo chown -R $USER /usr/local/lib/node\_modules 讓我們來詳細說明一下: sudo表示我們正在以root權限運行此指令,系統超級使用者。這是因為我們沒有寫入該資料夾的權限,但root可以修復任何權限。這個指令也表示系統會要求您輸入密碼以進行確認。 chown是我們用於更改檔案或資料夾所有者的指令。我們設置了-R選項以遞歸更改所有已包含在其中的檔案的所有者權限。 $USER 是一個自動設定為您的使用者名稱的環境變數。 最後一個部分是資料夾路徑。 執行這個指令將使該資料夾成為您的,這樣您就可以安全地運行您的npm install -g <package>指令! 請注意錯誤訊息中列出的資料夾。如果資料夾不同,請相應更新chown指令。 此提示適用於單使用者系統。在多使用者系統中,您可能需要為npm模組創建專用目錄,請參閱https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally。

如何修復在使用GitBook時出現的「cb.apply is not a function」錯誤

我經常使用 GitBook,這是一個小型的 Node.js 軟體,用於從一組 Markdown 檔案生成電子書。 我用它來製作我的電子書。今天在運行 gitbook pdf . 生成 PDF 時,我遇到了一個非常奇怪的錯誤: ➜ ebook git:(master) ✗ gitbook pdf . /usr/local/lib/node\_modules/gitbook-cli/node\_modules/npm/node\_modules/graceful-fs/polyfills.js:287 if (cb) cb.apply(this, arguments) ^ TypeError: cb.apply is not a function at /usr/local/lib/node\_modules/gitbook-cli/node\_modules/npm/node\_modules/graceful-fs/polyfills.js:287:18 cb.apply is not a function。這句話什麼意思?更重要的是,為什麼我現在出現這個錯誤?我最近沒有更新 gitbook 套件,也沒有…哦,我記得我更新了我運行的 Node.js 版本。但是我不知道為什麼這可能是問題所在。也許是吧。 不管怎樣…這個錯誤來自 /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js 文件。這是 graceful-js npm 套件,一個「為內建的 Node.js fs 模塊提供各種改進的替代方案」,每周安裝超過 3300 萬次。 其中一個改進似乎破壞了我的工作流程,就是今天! 我沒有太多時間去找出為什麼我的 Node.js 版本會導致這個我沒有創建的應用程序和這個庫出現問題。 我打開了 /usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js 文件,這就是錯誤的來源。 這是引起問題的函數: function statFix (orig) { if (!orig) return orig // 較早版本的 Node....