Tag: nodejs

/node_modules/node-sass: Command failed.

Recently, while upgrading Node.js from version 14.17.3 to 20.9.0, I encountered a bunch of errors after running `yarn install`. After some research, I found out that node-sass has compatibility issues with different versions of nodejs. NodeJS Supported node-sass version Node Module Node 20 9.0+ 115 Node 19 8.0+ 111 Node 18 8.0+ 108 Node 17 […]

[zsh] 切換目錄時自動根據 .nvmrc 切換 nodejs 版本

最近在整理電腦環境時,順便看了一下之前切換的 nodejs 版本的方式 以往都是透過 nvm 去管理 nodejs 的各個版本,並且透過 avn 自動根據 .node-version 切換 nodejs 版本 但這次在看 avn 時發現,這個 package 從 2020 以後就開始沒有在維護了, 在切換 nodejs 10.x 以上時也會部份錯誤 相關的 issue 可以參考這個 issue: Is avn project officially unsupported? https://github.com/wbyoung/avn/issues/109 這邊紀錄一下,如何不使用 avn 在 zsh 切換目錄時,自動偵測 .nvmrc 設定檔呼叫 nvm 切換 nodejs 版本 💡 記得要先安裝好 nodejs 與 nvm 就大功告成了 🎉 參考資料

[nodejs] nvm is not compatible with the npm config “prefix” option: currently set to ….

有次重開電腦後,terminal 就一直噴以下這個錯誤 nvm is not compatible with the npm config “prefix” option: currently set to “/usr/local” Run `npm config delete prefix` or `nvm use –delete-prefix v8.8.1 –silent` to unset it. 初步看起來像是 nvm 的 PATH 跑掉了,查了一下資料,在這紀錄一下如何解決 nvm uninstall v5.7.1 && nvm install v5.7.1 通常是某個版本的 node 發生了路徑找不到或是執行上的錯誤,重裝即可重新設定。 如果仍然不行,可以試試 nvm unalias default 參考資料: https://github.com/creationix/nvm/issues/1245

[Nodejs] module.exports 與 exports 的差別

如果沒有接觸過 commonJs 這類可以將 js 模組化為檔案的開發者,剛開始寫 Nodejs 時可能會有點不懂 module.exports 與 exports 的差別 舉例來說: 有一個 player.js 這樣就產生了一個 player.js 這個模組 如果今天 main.js 想要使用這個模組,就可以透過 require 來引入模組 如: 再來我們看看使用 exports 新增一個 removePlayer 的方法 原因是在模組裡面其實會預先幫你做 預設當我們使用 exports 其實也代表更改了 module.exports 。 但當直接使用 module.exports = {…} 其實也就更改了模組對外公開的物件,因此更改 exports 時無法更改到 module.exports。   參考資料: https://program365.wordpress.com/2015/07/02/understanding-module-exports-and-exports-in-node-js/

[Nodejs] Weighted Random,帶有權重的隨機函式

前一陣子寫論文時,有用到一些輪盤法,用圖片簡言之 比如我們希望依照上方的圓餅圖的比例去選出A、B及C等項目。 選到A的機率為 20% 選到B的機率為 15% 選到C的機率為 10% 選到其他的機率為 55% 以下的程式碼為使用 Nodejs 實作這樣的帶有權重的隨飢函式 PS. 如果不想重複選的話,就需要有一個陣列記住哪些選過了~ 參考資料: http://www.blogjava.net/sevenduan/archive/2009/12/11/305552.html        

[nodejs] 同步執行迴圈(synchronous loop)實作

在使用 nodejs 時,大家都知道很多函式都是使用 callback 的方式來撰寫,但有時候我們可能希望同步的執行程式碼。 舉個例子: 比如我們要將多筆資料,一筆一筆的塞進去 mongoDB 藉由上面這段程式碼,我們會非同步的執行資料一筆一筆塞入 mongoDB 的動作,但這樣非同步的塞資料,可能會導致機器負載過高,甚至 mongoDB 無法負荷等等。 所以,有時候我們會希望是一筆一筆資料同步的塞進去,而不是非同步執行。 這時候,我們就可以使用 callback 的寫法來時做這個迴圈,如下程式碼: var i=0; var max=docs.length; (function insertData() { db.collection(‘data’).insertOne({….}, (err, result) => { i++; if(i<max) insertData(); }); }()); 這樣就可以保證一筆塞完成功後,才會再塞下一筆。上面程式碼有用到 IIFE(立即執行函式)

[nodejs] express get 及 post 的使用

在 express 中我們最頻繁串接傳送資料的 API 方法就是 get 與 post 然而,在 express 要如何接收前端所發送的 get 與 post 資料 比如前端頁面(post) 在 express 這邊我們就可以透過 req.body.[name] 拿到該資料 如果是 get 的話就改為 req.query.name,即可收到資料 在 express 這邊我們就可以透過 req.query.[name] 拿到該資料

[apache] 同時使用 apache 與 nodejs,反向代理 nodejs

這幾天有一些服務後端用到 nodejs,但主要的網頁服務還是 apache 來處理,因此想說是否可以同時運行 nodejs 與 apache。   其實如果可以的話,使用 nginx 來做代理伺服器會更好(比 apache 處理的效能好,比較不會這麼限制 nodejs 速度) 由於我機器上面已經裝有LAMP的環境,並且運行部分服務,因此先使用 apache 來做代理伺服器堪用一下。 開啟 mod_proxy 及 mod_proxy_http sudo a2enmod proxy sudo a2enmod proxy_http 重新啟動 apache sudo service apache2 restart 編輯 /etc/apache2/sites-enabled/000-default.conf,nodejs 預設 port 為 3000 <VirtualHost *:80> # reverse proxy <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> […]

[ubuntu] 安裝 nodejs 與 npm

這篇採用的系統環境為 ubuntu 14.04   使用 ubuntu 的套件庫進行安裝,一行指令安裝 (由於此安裝方法的來源為 ubuntu 維護, nodejs 版本可能會比較低) sudo apt-get install nodejs sudo apt-get install nodejs-legacy sudo apt-get install npm ps. 由於 nodejs 安裝完後會產生執行檔 /usr/bin/nodejs,透過 node-legacy 會幫我們建立常見的 /usr/bin/node 透過 PPA (personal package archive) 安裝,目前 nodejs 最高版本為 6.x curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh sudo bash nodesource_setup.sh sudo apt-get install nodejs sudo apt-get install build-essential ps. 此方法已經幫你裝好 […]

[npm] node package manager + node 如何使用一般使用者身份安裝 (linux 環境)

有些時候我們並不會擁有機器的 root 權限,如何在非 root 的情況下安裝 node 和 npm ps. 前提是系統必須裝有 C/C++ 的編譯器,如:gcc/g++   至 nodejs 官方網站,下載 source code 版本至家目錄 https://nodejs.org/en/download/ 解壓縮至家目錄 cd ~ tar -zxvf  node-v4.2.6.tar.gz  在家目錄創建 .npmrc 設定檔,加入以下內容 root = /home/YOUR-USERNAME/.local/lib/node_modules binroot = /home/YOUR-USERNAME/.local/bin manroot = /home/YOUR-USERNAME/.local/share/man 進入解壓縮後的目錄,開始做安裝目錄設定及編譯安裝( 我們將安裝在 ~/.local ,原本預設是/ur/local/.local ) ./configure –prefix=~/.local make make install  建立 symbolic link ,設定我們 require 時預設會找的目錄 cd […]