I have been learning programming on and off for a few years now and finally decided to take a bootcamp and have been loving it. However, one drawback is we haven't really gotten into the meat of NPM and building/deploying our project using NPM, they only skimmed the surface.
I was able to easily build the project we worked on together, but after building my own site and using different packages/functionality, when I try to use my build script to send everything to my dist folder for deployment on my server I am missing some assets somewhere.
I am missing the following assets/functionality after building:
- Font awesome icons
- Slick carousel buttons and functionality
Here is my code:
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="description" content="Specializing in hair and makeup services for weddings, senior pictures and formal events.">
<!-- build:css css/main.css -->
<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css"/>
<link rel="stylesheet" href="node_modules/@fortawesome/fontawesome-free/css/all.css"/>
<link rel="stylesheet" href="/css/styles.css" />
<link rel="stylesheet" type="text/css" href="slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
<!-- endbuild -->
<!-- Google font package Robot Slab -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Amatic+SC:wght@700&display=swap" rel="stylesheet">
<title>Kaylee Derrick Hair and Makeup</title>
</head>
<body>
<navbar class="navbar sticky-top navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="#"><img src="images/logos/1transparentcropped.png" id="nav-logo"></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<i class="fas fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#slider-div">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#services-div">Services</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#about-div">About Me</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#pricing-div">Pricing</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contact-me-div">Contact</a>
</li>
</ul>
</div>
</div>
</navbar>
<div class="photo-slider" id="slider-div">
<div><img class="slider-img" src="images/works/weddings/wedding (1).JPG"></div>
<div><img class="slider-img" src="images/works/weddings/wedding (2).JPG"></div>
<div><img class="slider-img" src="images/works/weddings/wedding (3).JPG"></div>
</div>
<div class="row" id="services-div">
<div class="col-12 text-center">
<h1 class="mx-auto">Services</h1>
</div>
<div class="col-12 col-lg-3 ml-auto card-div">
<div class="card mx-auto">
<img class="card-img-top" src="images/icons/wedding-rings.png" alt="wedding image">
<div class="card-body text-center">
<h5 class="card-title">Weddings</h5>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
</div>
<div class="col-12 col-lg-3 mx-auto card-div">
<div class="card mx-auto">
<img class="card-img-top" src="images/icons/graduation-cap.png" alt="senior picture image">
<div class="card-body text-center">
<h5 class="card-title">Senior Pictures</h5>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
</div>
<div class="col-12 col-lg-3 mr-auto card-div">
<div class="card mx-auto">
<img class="card-img-top" src="images/icons/dress.png" alt="formal event picture">
<div class="card-body text-center">
<h5 class="card-title">Formal Events</h5>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
</div>
</div>
</div>
<div class="row" id="about-div">
<div class="col-10 col-lg-6 mx-auto my-auto text-center">
<h1>About Me</h1>
<p>Some quick example text to build on the card title and make up the bulk of the card's content.</p>
</div>
<div class="col-12 col-lg-6 text-center">
<img src="images/kd.jpg" id="about-img">
</div>
</div>
<div class="row" id="pricing-div">
<div class="col-12 text-center">
<h1 class="mx-auto">Pricing</h1>
</div>
<div class="col-12 col-lg-3 ml-auto card-div">
<div class="card mx-auto">
<div class="card-header text-center">
<h3>Weddings</h3>
</div>
<div class="card-body">
<ul>
<li>Bridal Hair - $$$</li>
<li>Bridal Makeup - $$$</li>
<li>Bridesmaid Hair - $$$</li>
<li>Bridesmaid Makeup - $$$</li>
</ul>
</div>
</div>
</div>
<div class="col-12 col-lg-3 mx-auto card-div">
<div class="card mx-auto">
<div class="card-header text-center">
<h3>Senior Pictures</h3>
</div>
<div class="card-body">
<ul>
<li>Bridal Hair - $$$</li>
<li>Bridal Makeup - $$$</li>
<li>Bridesmaid Hair - $$$</li>
<li>Bridesmaid Makeup - $$$</li>
<li>Bridal Party - Please contact for quote</li>
</ul>
</div>
</div>
</div>
<div class="col-12 col-lg-3 mr-auto card-div">
<div class="card mx-auto">
<div class="card-header text-center">
<h3>Formal Events</h3>
</div>
<div class="card-body">
<ul>
<li>Bridal Hair - $$$</li>
<li>Bridal Makeup - $$$</li>
<li>Bridesmaid Hair - $$$</li>
<li>Bridesmaid Makeup - $$$</li>
<li>Bridal Party - Please contact for quote</li>
</ul>
</div>
</div>
</div>
</div>
<div class="row" id="contact-me-div">
<div class="col-12 col-lg-6 text-center">
<h1>Contact Me</h1>
<div class="row">
<div class="col-12" id="contact-icon-div">
<a href="tel:9032745133"><i class="fas fa-phone contact-icon"></i></a>
<a href = "mailto:kayleederrickhmua@gmail.com"><i class="fas fa-envelope-open-text contact-icon"></i></a>
</div>
</div>
</div>
<div class="col-12 col-lg-6">
<form class="form-row" id="contact-form">
<div class="form-group col-8 col-lg-4 ml-auto">
<input type="text" class="form-control" id="name" placeholder="Name">
</div>
<div class="form-group col-8 col-lg-4 mr-auto">
<input type="phone" class="form-control" id="phone" placeholder="Phone Number">
</div>
<div class="form-group col-8 col-lg-8 mx-auto">
<input type="email" class="form-control" id="email" placeholder="Email">
</div>
<div class="form-group col-8 col-lg-8 mx-auto">
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3" placeholder="Enter message here"></textarea>
</div>
<div class="form-group col-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
<div class="row" id="footer-div">
<div class="col-12 col-lg-6 text-center my-auto">
Copyright © 2021 LD Web Design
</div>
<div class="col-12 col-lg-6 text-center">
<a href="https://www.facebook.com/kayleederrickhairandmakeup"><i class="fab fa-facebook"></i></a>
<a href="https://www.instagram.com/kayleederrickhairandmakeup"><i class="fab fa-instagram"></i></a>
<a href="tel:9032745133"><i class="fas fa-phone"></i></a>
<a href = "mailto:kayleederrickhmua@gmail.com"><i class="fas fa-envelope-open-text"></i></a>
</div>
</div>
<!-- build:js js/main.js -->
<script src="node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="slick/slick.min.js"></script>
<script src="js/scripts.js"></script>
<!-- endbuild -->
</body>
</html>
CSS
body {
overflow-x: hidden !important;
font-family: 'Amatic SC', cursive; }
.navbar {
margin: 0 0 0 0;
padding: 0 0 0 0;
background-color: white; }
.navbar .navbar-brand {
margin-left: 15%; }
.navbar .navbar-nav {
margin-right: 15%; }
.navbar a {
color: black; }
#nav-logo {
width: 150px; }
@media screen and (max-width: 992px) {
#nav-logo {
width: 100px; }
.navbar-brand {
margin-left: 15%;
margin-top: 5px; }
.navbar-toggler {
margin-right: 15%;
color: black;
font-size: 20px; }
.navbar-nav {
margin: 0 0 0 0 !important;
align-items: center; } }
.slick-slide {
margin: 0 15px 0 15px; }
.slider-img {
max-height: 65vh; }
#services-div {
padding: 10px 0 10px 0; }
#services-div .card {
max-width: 15vw;
border: none;
background-color: transparent; }
@media screen and (max-width: 992px) {
#services-div .card-div {
padding: 15px 0 15px 0; }
#services-div .card {
max-width: 50vw; } }
#about-div {
padding: 10px 0 10px 0; }
#about-img {
height: 85vh; }
#pricing-div {
padding: 10px 0 10px 0; }
#pricing-div .card {
max-width: 20vw;
border: none;
background-color: transparent; }
#pricing-div .card .card-header {
background-color: transparent;
border: none; }
@media screen and (max-width: 992px) {
#pricing-div .card-div {
padding: 15px 0 15px 0; }
#pricing-div .card {
max-width: 50vw; } }
#contact-me-div #contact-icon-div {
text-align: center;
margin-top: 5%;
margin-bottom: 5%; }
#contact-me-div .contact-icon {
font-size: 50px;
padding: 20px;
color: black; }
#contact-me-div .btn {
background-color: black;
border-color: black; }
#contact-me-div .btn :hover {
background-color: black;
border-color: black; }
@media screen and (max-width: 992px) {
#contact-me-div .form-group {
margin-left: auto;
margin-right: auto; } }
#footer-div {
background-color: #ddaf94;
margin-bottom: 0; }
i {
color: black;
font-size: 30px;
padding: 20px; }
JS
$(function () {
// slick slider script
$('.photo-slider').slick({
dots: true,
infinite: true,
speed: 300,
slidesToShow: 1,
centerMode: true,
variableWidth: true,
centerPadding: "15px",
adaptiveHeight: true
});
});
package.JSON
{
"name": "hamsite",
"version": "1.0.0",
"description": "This is a website for hair and makeup servies by Kaylee Derrick",
"main": "index.html",
"scripts": {
"build": "npm run clean && npm run imagemin && npm run copyfiles && npm run usemin",
"clean": "rimraf dist",
"copyfiles": "copyfiles -f slick/fonts/* dist/fonts && copyfiles -f node_modules/@fortawesome/fontawesome-free/webfonts/* dist/fonts",
"imagemin": "imagemin images/* -o dist/images && imagemin images/logos/* -o dist/images/logos && imagemin images/works/* -o dist/images/works && imagemin images/works/formals/* -o dist/images/works/formals && imagemin images/works/seniors/* -o dist/images/works/seniors && imagemin images/works/weddings/* -o dist/images/works/weddings && imagemin images/icons/* -o dist/images/icons",
"lite": "lite-server",
"scss": "node-sass -o css/ css/",
"start": "npm run watch:all",
"test": "echo \"Error: no test specified\" && exit 1",
"usemin": "usemin index.html -d dist -o dist/index.html",
"watch:scss": "onchange \"css/*.scss\" -- npm run scss",
"watch:all": "parallelshell \"npm run watch:scss\" \"npm run lite\""
},
"author": "Logan Derrick",
"license": "ISC",
"devDependencies": {
"copyfiles": "^2.2.0",
"imagemin-cli": "^6.0.0",
"lite-server": "^2.5.4",
"node-sass": "^4.14.1",
"onchange": "^7.0.0",
"parallelshell": "3.0.1",
"rimraf": "^3.0.2",
"usemin-cli": "^0.6.0"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.3",
"bootstrap": "^4.5.2",
"jquery": "^3.6.0",
"popper.js": "^1.16.1"
}
}
Could someone help me better understand what I need to add to my package file and/or edit in my code to make this work?