In this tutorial for Visual Studio development using Node.js and Express, you create a simple Node.js web application, add some code, explore some features of the IDE, and run the app.
When done, the install script prints out instructions for running and starting code-server. We also have an in-depth setup and configuration guide. Cloud Program ☁️. We're working on a cloud platform that makes deploying and managing code-server easier. Consider running code-server with the beta flag -link if you don't want to worry about. It is the start of a New Year and you have decided to try Visual Studio Code, good resolution! One of the things you will find the most surprising, is that unlike its big brother Visual Studio which has IIS Express, VS Code does not come with a built-in web server. Visual Studio Code vs. Visual Studio: How to choose Deciding between Visual Studio Code and Visual Studio may depend as much on your work style as on the language support and features you need. Node.js tutorial in Visual Studio Code Node.js is a platform for building fast and scalable server applications using JavaScript. Node.js is the runtime and npm is the Package Manager for Node.js modules. Visual Studio Code has support for the JavaScript and TypeScript languages out-of-the-box as well as Node.js debugging. When a client connects to a server, it sends a GET request to upgrade the connection to a WebSocket from a simple HTTP request. This is known as handshaking. This sample code can detect a GET from the client. Note that this will block until the first 3 bytes of a message are available.
If you haven't already installed Visual Studio, go to the Visual Studio downloads page to install it for free.
If you haven't already installed Visual Studio, go to the Visual Studio downloads page to install it for free.
In this tutorial, you learn how to:
- Create a Node.js project
- Add some code
- Use IntelliSense to edit code
- Run the app
- Hit a breakpoint in the debugger
Before you begin
Here's a quick FAQ to introduce you to some key concepts.
What is Node.js?
Microsoft Visual Studio Code
Node.js is a server-side JavaScript runtime environment that executes JavaScript server-side.
What is npm?
npm is the default package manager for the Node.js. The package manager makes it easier for programmers to publish and share source code of Node.js libraries and is designed to simplify installation, updating, and uninstallation of libraries.
What is express?
Express is a web application framework, used as a server framework for Node.js to build web applications. Express allows you to choose different front-end frameworks to create a UI, such as Pug (formerly called Jade). Pug is used in this tutorial.
Prerequisites
You must have Visual Studio installed and the Node.js development workload.
If you haven't already installed Visual Studio 2019, go to the Visual Studio downloads page to install it for free.
If you haven't already installed Visual Studio 2017, go to the Visual Studio downloads page to install it for free.
If you need to install the workload but already have Visual Studio, go to Tools > Get Tools and Features..., which opens the Visual Studio Installer. Choose the Node.js development workload, then choose Modify.
You must have the Node.js runtime installed.
If you don't have it installed, we recommend you install the LTS version from the Node.js website for best compatibility with outside frameworks and libraries. Node.js is built for 32-bit and 64-bit architectures. The Node.js tools in Visual Studio, included in the Node.js workload, support both versions. Only one is required and the Node.js installer only supports one being installed at a time.
In general, Visual Studio automatically detects the installed Node.js runtime. If it does not detect an installed runtime, you can configure your project to reference the installed runtime in the properties page (after you create a project, right-click the project node, choose Properties, and set the Node.exe path). You can use a global installation of Node.js or you can specify the path to a local interpreter in each of your Node.js projects.
This tutorial was tested with Node.js 8.10.0.
Create a new Node.js project
Visual Studio manages files for a single application in a project. The project includes source code, resources, and configuration files.
In this tutorial, you begin with a simple project containing code for a Node.js and express app.
Open Visual Studio.
Create a new project.
Press Esc to close the start window. Type Ctrl + Q to open the search box, type Node.js, then choose Create a new Basic Azure Node.js Express 4 application (JavaScript). In the dialog box that appears, choose Create.
From the top menu bar, choose File > New > Project. In the left pane of the New Project dialog box, expand JavaScript, then choose Node.js. In the middle pane, choose Basic Azure Node.js Express 4 application, then choose OK.
If you don't see the Basic Azure Node.js Express 4 application project template, you must add the Node.js development workload. For detailed instructions, see the Prerequisites.
Visual Studio creates the new solution and opens your project in the right pane. The app.js project file opens in the editor (left pane).
(1) Highlighted in bold is your project, using the name you gave in the New Project dialog box. In the file system, this project is represented by a .njsproj file in your project folder. You can set properties and environment variables associated with the project by right-clicking the project and choosing Properties. You can do round-tripping with other development tools, because the project file does not make custom changes to the Node.js project source.
(2) At the top level is a solution, which by default has the same name as your project. A solution, represented by a .sln file on disk, is a container for one or more related projects.
(3) The npm node shows any installed npm packages. You can right-click the npm node to search for and install npm packages using a dialog box or install and update packages using the settings in package.json and right-click options in the npm node.
(4) package.json is a file used by npm to manage package dependencies and package versions for locally-installed packages. For more information, see Manage npm packages.
(5) Project files such as app.js show up under the project node. app.js is the project startup file and that is why it shows up in bold. You can set the startup file by right-clicking a file in the project and selecting Set as Node.js startup file.
Open the npm node and make sure that all the required npm packages are present.
If any packages are missing (exclamation point icon), you can right-click the npm node and choose Install npm Packages.
Add some code
The application uses Pug for the front-end JavaScript framework. Pug uses simple markup code that compiles to HTML. (Pug is set as the view engine in app.js. The code that sets the view engine in app.js is app.set('view engine', 'pug');
.)
In Solution Explorer (right pane), open the views folder, then open index.pug.
Replace the content with the following markup.
The preceding code is used to dynamically generate an HTML page with a title and welcome message. The page also includes code to display an image that changes whenever you press a button.
In the routes folder, open index.js.
Add the following code before the call to
router.get
:This code creates a data object that you pass to the dynamically generated HTML page.
Replace the
router.get
function call with the following code:The preceding code sets the current page using the Express router object and renders the page, passing the title and data object to the page. The index.pug file is specified here as the page to load when index.js runs. index.js is configured as the default route in app.js code (not shown).
To demonstrate several features of Visual Studio, there's a deliberate error in the line of code containing
res.render
. You need to fix the error before the app can run, which you do in the next section.
Use IntelliSense
IntelliSense is a Visual Studio tool that assists you as you write code.
In index.js, go to the line of code containing
res.render
.Put your cursor after the
data
string, type: get
and IntelliSense will show you thegetData
function defined earlier in the code. SelectgetData
.Add the parentheses to make it a function call,
getData()
.Remove the comma (
,
) before'data'
and you see green syntax highlighting on the expression. Hover over the syntax highlighting.The last line of this message tells you that the JavaScript interpreter expected a comma (
,
).In the lower pane, click the Error List tab and select Build + IntelliSense for the type of issues reported.
You see the warning and description along with the filename and line number.
Fix the code by adding the comma (
,
) before'data'
.When corrected, line of code should look like this:
res.render('index', { title: 'Express', 'data': getData() });
Set a breakpoint
You're next going to run the app with the Visual Studio debugger attached. Before doing that, you need to set a breakpoint.
In index.js, click in the left gutter before the following line of code to set a breakpoint:
res.render('index', { title: 'Express', 'data': getData() });
Breakpoints are the most basic and essential feature of reliable debugging. A breakpoint indicates where Visual Studio should suspend your running code so you can take a look at the values of variables, or the behavior of memory, or whether or not a branch of code is getting run.
Run the application
Select the debug target in the Debug toolbar, such as Web Server (Google Chrome) or Web Server (Microsoft Edge).
If Chrome is available on your machine, but does not show up as an option, choose Browse With from the debug target dropdown list, and select Chrome as the default browser target (choose Set as Default).
Press F5 (Debug > Start Debugging) to run the application.
The debugger pauses at the breakpoint you set. Now, you can inspect your app state.
Hover over
getData
to see its properties in a DataTipPress F5 (Debug > Continue) to continue.
The app opens in a browser.
In the browser window, you will see 'Express' as the title and 'Welcome to Express' in the first paragraph.
Click the buttons to display different images.
Close the web browser.
(Optional) Publish to Azure App Service
In Solution Explorer, right-click the project and choose Publish.
Choose Microsoft Azure App Service.
In the App Service dialog box, you can sign into your Azure account and connect to existing Azure subscriptions.
Follow the remaining steps to select a subscription, choose or create a resource group, choose or create an app service plane, and then follow the steps when prompted to publish to Azure. For more detailed instructions, see Publish to Azure website using web deploy.
The Output window shows progress on deploying to Azure.
On successful deployment, your app opens in a browser running in Azure App Service. Click a button to display an image.
Congratulations on completing this tutorial!
Next steps
Visual Studio Code provides basic support for HTML programming out of the box. There is syntax highlighting, smart completions with IntelliSense, and customizable formatting. VS Code also includes great Emmet support.
IntelliSense
As you type in HTML, we offer suggestions via HTML IntelliSense. In the image below, you can see a suggested HTML element closure </div>
as well as a context specific list of suggested elements.
We also offer up suggestions for elements, tags, some values (as defined in HTML5), Ionic and AngularJS tags. Document symbols are also available for HTML, allowing you to quickly navigate to DOM nodes by id and class name.
You can also work with embedded CSS and JavaScript. However, note that script and style includes from other files are not followed, the language support only looks at the content of the HTML file.
You can trigger suggestions at any time by pressing ⌃Space (Windows, Linux Ctrl+Space).
You can also control which built-in code completion providers are active. Override these in your user or workspace settings if you prefer not to see the corresponding suggestions.
Close tags
Tag elements are automatically closed when >
of the opening tag is typed.
The matching closing tag is inserted when /
of the closing tag is entered.
You can turn off autoclosing tags with the following setting:
Auto update tags
When modifying a tag, the linked editing feature automatically updates the matching closing tag. The feature is optional and can be enabled by setting:
Color picker
The VS Code color picker UI is now available in HTML style sections.
It supports configuration of hue, saturation and opacity for the color that is picked up from the editor. It also provides the ability to trigger between different color modes by clicking on the color string at the top of the picker. The picker appears on a hover when you are over a color definition.
Hover
Move the mouse over HTML tags or embedded styles and JavaScript to get more information on the symbol under the cursor.
Validation
The HTML language support performs validation on all embedded JavaScript and CSS.
You can turn that validation off with the following settings:
Folding
You can fold regions of source code using the folding icons on the gutter between line numbers and line start. Folding regions are available for all HTML elements for multiline comments in the source code.
Additionally you can use the following region markers to define a folding region: <!-- #region -->
and <!-- endregion -->
If you prefer to switch to indentation based folding for HTML use:
Formatting
To improve the formatting of your HTML source code, you can use the Format Document command ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) to format the entire file or Format Selection⌘K ⌘F (Windows, Linux Ctrl+K Ctrl+F) to just format the selected text.
The HTML formatter is based on js-beautify. The formatting options offered by that library are surfaced in the VS Code settings:
html.format.wrapLineLength
: Maximum amount of characters per line.html.format.unformatted
: List of tags that shouldn't be reformatted.html.format.contentUnformatted
: List of tags, comma separated, where the content shouldn't be reformatted.html.format.extraLiners
: List of tags that should have an extra newline before them.html.format.preserveNewLines
: Whether existing line breaks before elements should be preserved.html.format.maxPreserveNewLines
: Maximum number of line breaks to be preserved in one chunk.html.format.endWithNewline
: End with a newline.html.format.indentInnerHtml
: Indent<head>
and<body>
sections.html.format.wrapAttributes
: Wrapping strategy for attributes:auto
: Wrap when the line length is exceededforce
: Wrap all attributes, except firstforce-aligned
: Wrap all attributes, except first, and align attributesforce-expand-multiline
: Wrap all attributesaligned-multiple
: Wrap when line length is exceeded, align attributes verticallypreserve
: Preserve wrapping of attributespreserve-aligned
: Preserve wrapping of attributes but align
html.format.wrapAttributesIndentSize
: Alignment size when usingforce aligned
andaligned multiple
inhtml.format.wrapAttributes
ornull
to use the default indent size.html.format.templating
: Honor django, erb, handlebars and php templating language tags.html.format.unformattedContentDelimiter
: Keep text content together between this string.
Tip: The formatter doesn't format the tags listed in the html.format.unformatted
and html.format.contentUnformatted
settings. Embedded JavaScript is formatted unless 'script' tags are excluded.
The Marketplace has several alternative formatters to choose from. If you want to use a different formatter, define 'html.format.enable': false
in your settings to turn off the built-in formatter.
Emmet snippets
VS Code supports Emmet snippet expansion. Emmet abbreviations are listed along with other suggestions and snippets in the editor auto-completion list.
Tip: See the HTML section of the Emmet cheat sheet for valid abbreviations.
If you'd like to use HTML Emmet abbreviations with other languages, you can associate one of the Emmet modes (such as css
, html
) with other languages with the emmet.includeLanguages
setting. The setting takes a language id and associates it with the language id of an Emmet supported mode.
For example, to use Emmet HTML abbreviations inside JavaScript:
We also support User Defined Snippets.
HTML custom data
You can extend VS Code's HTML support through a declarative custom data format. By setting html.customData
to a list of JSON files following the custom data format, you can enhance VS Code's understanding of new HTML tags, attributes and attribute values. VS Code will then offer language support such as completion & hover information for the provided tags, attributes and attribute values.
You can read more about using custom data in the vscode-custom-data repository.
HTML extensions
Install an extension to add more functionality. Go to the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and type 'html' to see a list of relevant extensions to help with creating and editing HTML.
Tip: Click on an extension tile above to read the description and reviews to decide which extension is best for you. See more in the Marketplace.
Next steps
Read on to find out about:
Visual Studio Code Web Server
- CSS, SCSS, and Less - VS Code has first class support for CSS including Less and SCSS.
- Emmet - Learn about VS Code's powerful built-in Emmet support.
- Emmet official documentation - Emmet, the essential toolkit for web-developers.
Common questions
Does VS Code have HTML preview?
No, VS Code doesn't have built-in support for HTML preview but there are extensions available in the VS Code Marketplace. Open the Extensions view (⇧⌘X (Windows, Linux Ctrl+Shift+X)) and search on 'live preview' or 'html preview' to see a list of available HTML preview extensions.