Skip to main content

Use NVM to handle Angular-Node.js incompatibility (e.g., Uncaught SyntaxError: Unexpected token 'export')

Overview

If you are a fullstack developer, the chances are that you will be creating multiple frontend or Node.js projects along the way. When you are creating new projects using the newest version of the cli (command-line interface) of a particular framework, you might be asked to install the most updated version of Node.js in order to utilize the newest feature. This might involve upgrading your Node.js version, which might not be compatible with other existing projects (e.g., using Angular) you have created before.


A potential solution is to use nvm (Node Version Manager) to install multiple versions of Node.js and use a particular version of the Node.js to install the proper version of the cli (e.g., Angular-CLI) that can be used to manage a particular project.


Here I will use a problem I run into to explain how to solve it.


Problem

There is a compatibility issue between Node.js and angular.js. For instance, I run into an error when I was using an incompatible version of Node.js and Angular-CLI:


Uncaught SyntaxError: Unexpected token 'export'

Here is a StackOverflow post discussing a similar issue, with a table detailing the required version of Node.js for each version of Angular-CLI.

Additionally, several articles have discussed solutions to this problem. 

These articles are really helpful in understanding the issue and the possible solution.

The problem I have is, after I follow these instructions, when I run "ng serve," the wrong version of Angular-CLI is being run. One of the possible causes, I suspect, is that, before using nvm, I have to add the path to Node.js executable to the system's variable (i.e., "Path"). The Angular-CLI I installed with that version of Node.js can be found even if I am running another version of Node.js using nvm.

Here is a list of steps I found useful to solve the problem.

Solution

Step 1: Remove Node.js executable from system's path (environment variable)

If you have manually added Node.js to your system's path and/or installed Angular-CLI using that particular Node.js, you need to first remove the Node.js path from your system's variables.

On windows, you can find it through the following: Edit the system environment variables -> Advanced -> Environment Variables.

Find the variable "Path" and remove Node.js from it.

An example of the value might look like this: 


C:\Users\Patrick\.nvm\versions\node\v16.13.2\bin\

Step 2: Install nvm

Follow the instructions here for installing nvm: https://github.com/nvm-sh/nvm

Step 3: Install Angular-CLI using the proper version of Node.js

Find available versions of Node.js installed through nvm:



nvm list


If the desirable Node.js version (the one that is compatible with the desirable Angular-CLI version for a project) is not installed, use the following command to install a particular version of ndoe.js.




nvm install 14.7.0



After installing the desirable Node.js version, use the following command to indicate you would like to execute commands under that particular version.



nvm use 14.7.0



You can then use the following command to install Angular-CLI using that particular Node.js version:



nvm exec npm install -g @angular/cli@12.1.3


Because the "ng" executable will literally be installed under the folder for a particular Node.js version. This step ensures that the Angular-CLI you can later invoke through a particular Node.js version, will be that specific version.



Step 4: Run the project

In your project folder, execute the following commands to use a Node.js version you choose (e.g., 14.7.0) and a compatible Angular-CLI version (i.e., 12.1.3) to run your project.




nvm exec ng serve

Comments

Popular posts from this blog

Setting MySQL to Use UTF-8 on MAMP (MySQL 5.5.9, or 5+)

I wanted to setup MySQL to use utf-8 on the MAMP installation on my Mac. I tried the instructions from this article: http://cameronyule.com/2008/07/configuring-mysql-to-use-utf-8/ However, I kept getting error messages that are similar to this one [ERROR] /Applications/MAMP/Library/bin/mysqld: unknown variable 'default-collation=utf8_general_ci' I did some search and realized that several variables are deprecated. Reference: http://dev.mysql.com/doc/refman/5.1/en/server-options.html Therefore, I added the following lines into /Applications/MAMP/conf/my.cnf [mysql] character-set-server=utf8 [client] character-set-server=utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci init-connect='SET NAMES utf8' I restarted the server and mysql run successfully with relevant variables being set correctly. In the "Variables" tab under phpMyAdmin interface (ex. http://localhost:8888/MAMP/?language=English) character set c...

ngrok, a service to help you get a public URL for your local webserver

If you are looking for options to test your web app hosted on your own machine (e.g., laptop) remotely with someone, I recommend using a service called ngrok. https://ngrok.com/ It has many usages, but in the context of testing an app hosted on your own machine, the most important part is giving you a public URL that will redirect all the requests to your local webserver (e.g., Apache, Nginx, or whatever server you are running). You can give this URL to a testing participant without the need to host the app on a remote server. For instance, if you are testing your app using a sever on your machine, typically you can access your app in a URL like:  http://localhost:3000/?study=11 Using ngrok, you will have a dynamically generated URL like the following: https://3ebe3c019867.ngrok.io/ The service will redirect requests to https://3ebe3c019867.ngrok.io to http://localhost:3000 You can then share the following link with your testing participant for the participant to use your app. http...

線上筆記本、便利貼整理 Online Note Taking Service (Especially Sticky Note) List

Some of the note taking service I have tried! Sticky Note lino it Comment: 精美、除了沒有辦法 download as file + print  之外,應該是這個  list  中的  best choice 中文資料儲存沒有問題,不會變亂碼 無法 double click create note, 但是可以用拖拉方式產生 可以 share, send link, embed, rss, 可用 email post, 無法存檔 無法 double click to edit,但是跳出視窗的速度還 OK、可直接 drag & drop 有 public(group) vs. private 的設定 不能 print(應該說 print 的時候內容不會出現) 有 Task 功能 無法download as file (應該沒有可以的) squareleaf Comment: 比較不  fancy  ,但是簡單可愛 中文資料儲存沒有問題,不會變亂碼 可用 browser print, 但是排版沒有很好 可直接點選編輯(不用等跳出小視窗後再 input) 無法在空白地方 double click 產生新 Note 無法 share, 無法download as file postica Comment: 精簡,稍微制式 中文資料儲存沒有問題,不會變亂碼 點選編輯的時候很慢,反應遲鈍 可以 Print, 但是中文編碼要選 UTF-8 可以 drag & drop 無法 download as file, 無法 share wall wisher Comment: 精美 中文儲存有問題 雙擊 create note, 可以拖拉 每個 note 有 160 character 的限制 文字沒有 Format,無法調整大小, 顏色 可 share, send link, rss fee...