Explain what “npm” stands for. - Node Package Manager - It allows us to, through the CLI, add packages (pieces of code) from other developers to our project and use them as building blocks. - The registry is a central location for these packages to reside, which allows us to more easily add them to our projects
Explain the purpose of the package.json file and node_modules directory. - package.json specifies which packages we want to use within the app as well as semantic versioning ranges to say what versions of that app are acceptable - package-lock.json specifies the exact version of the package that we have installed in our node_modules directory, where we got that package from, and dependencies of that package - node_modules is a directory that contains all of the actual code for packages that we have added to our project
npm init
is runnpm install
is runnpm -v
- npm install -g npm@latest
npm init
creates our package.json - npm install moment
adds the moment package as a dependency - const moment = require('moment');
imports the module into our code so that we can use the moment variable and call any methods on it that exist in the module;
moment.().format('dddd');
for example- We can also install a dependency as a dev dependency:
- `npm install --save-dev nodemon` adds the nodemon package as a dev dependency
Given a package version number following the MAJOR.MINOR.PATCH semantic versioning spec that may include tilde (~) and caret (^) ranges, identify the range of versions of the package that will be compatible. - *: latest version - >1.2.3: any version above 1.2.3 - ^1.2.3: any version in the major version 1 range (1.x.x) - ~1.2.3: any version in the minor version 1.2 range (1.2.x) - 1.2.3: exactly version 1.2.3
Given an existing GitHub repository, clone the repo and use npm to install it’s dependencies. - git clone <repo-url>
- cd into repo - npm install
Use npm uninstall to remove a dependency. - npm uninstall chai-spies
Use npm update to update an out-of-date dependency. - npm update chai-spies
Given a package with vulnerabilities due to outdated dependency versions, use npm audit to scan and fix any vulnerabilities. - npm audit
will show vulnerabilities and short description - npm audit fix
will update those dependencies if not restricted by package.json semver (semantic version number) - npm audit fix --force
will update the package even if it includes a major update, which would typically be restricted by the package.json - Important to note that if a package specifies its own dependency with a semver that has a vulnerability, that package would need to update what it depends on on its own, since updating to be outside of the range may break functionality of the package.
javascript "scripts": { "watch": "nodemon index.js" }
This script, called watch
, will run the command nodemon index.js
- Running: in the terminal:
npm run watch
Define a constructor function using ES5 syntax. javascript function Book(title, series, author) { this.title = title; this.series = series; this.author = author; }
Define a method on the prototype of a constructor function. javascript Book.prototype.getInformation = function () { if (this.series) { return `${this.title} (${this.series})`; } else { return this.title; } }
Declare a class using ES6 syntax. javascript class Book { constructor(title, series, author) { this.title = title; this.series = series; this.author = author; } }
Define an instance method on a class (ES6). ```javascript class Book { // constructor
getInformation() { if (this.series) { return ${this.title} (${this.series})
; } else { return this.title; } } } ```
Define a static method on a class (ES6). ```javascript class Book { // constructor
static getUniqueAuthors(…books) { let authors = []; books.forEach(book => { if (!authors.includes(book.author)) { authors.push(book.author) } }) return authors; } } ```
Instantiate an instance of a class using the new keyword. javascript const theGrapesOfWrath = new Book('The Grapes of Wrath', null, 'John Steinbeck');
Implement inheritance using the ES6 extends syntax for an ES6 class. javascript class Book extends CatalogItem { // Book code }
Utilize the super keyword in a child class to inherit from a parent class. ```javascript class CatalogItem { constructor(title, series) { this.title = title; this.series = series; }
getInformation() { if (this.series) { return ${this.title} (${this.series})
; } else { return this.title; } } }
class Book extends CatalogItem {
constructor(title, series, author) {
super(title, series);
this.author = author;
}
}
class Movie extends CatalogItem {
constructor(title, series, director) {
super(title, series);
this.director = director;
}
// extending the functionality of the parent's getInformation()
getInformation() {
let result = super.getInformation();
if (this.director) {
result += ` [directed by ${this.director}]`;
}
return result;
}
}
```
class CatalogItem {
// CatalogItem code
}
module.exports = CatalogItem
```
```javascript
// book.js
const CatalogItem = require('./catalog-item');
class Book extends CatalogItem {
// Book code
}
module.exports = Book
```
- In this next example, we are exporting a multiple items from a file. We are assigning an object to module.exports that contains each item we are exporting. When we import from this file, we can either import the whole object, or destructure right in our import
```javascript
// classes.js
class CatalogItem {
// CatalogItem code
}
class Book extends CatalogItem {
// Book code
}
class Movie extends CatalogItem {
// Movie code
}
module.exports = { Book, Movie}
```
```javascript
// index.js
const classes = require('./classes');
const Movie = classes.Movie;
const Book = classes.Book;
// Or, destructuring in the import statment:
// const { Movie, Book } = require('./classes');
const theGrapesOfWrath = new Book('The Grapes of Wrath', null, 'John Steinbeck');
const aNewHope = new Movie('Episode 4: A New Hope', 'Star Wars', 'George Lucas');
```
this
property references the object that the call originally came from.
Working with objects that come from code you didn’t create
Visualizations of our program (UI has to know about the structure of our data)