Git Product home page Git Product logo

vanilla-parcel-boilerplate's Introduction

Vanilla JS Parcel Boilerplate

This is a starter workflow for building vanilla JavaScript applications using Parcel along with Babel and Sass.

There is some sample code (Header and User components) and styling, but feel free to remove them

This project was created in a YouTube tutorial here

Usage

Install dependencies

npm install

Run dev server - http://localhost:3000

npm run dev

Build assets for production

npm run build

vanilla-parcel-boilerplate's People

Contributors

armandsalle avatar bradtraversy avatar dependabot[bot] avatar jeferson-sb avatar mikepianka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vanilla-parcel-boilerplate's Issues

Render fixed

Hi Brad, in main.js you call App.js that's not correct. To make app work as expected just rename component app.js to App.js. So simple typo that I have missed.

"template.content" returns undefined

the template.content in return template.content.clodeNode(true) in the App.js file is undefined
When i checked the template object, i didn't find any attribute of content in the list

Also, somehow the src in <img src="pictureHere"> attributes when i wanted to put in a logo did not work too, i tripple checked the paths

problem with cache

Hi Brad, the generated cache is not updating after save and keep old values. The only solution to get a code update is to restart the server and regenerate a new cache. Any suggestions?

EDIT: up to now I have found that problem is probably with @babel/plugin-transform-runtime.

How to insert scss inside shadowRoot Web Components

Is there an easy way to insert my scss file into my template.innerHTML?
The purpose being encapsulation of this specific style to be effective only for this component.

I am using "parcel-bundler": "^1.12.4"

How can I import the scss without it affecting the whole app + insert it into my web component template only?

I tried to place <link rel="stylesheet" href="../scss/animeCardStyle.scss"> inside the innerHTML of my template, without any results.

This is my component

// how do i include sass in template
import animeCardStyle from '../scss/animeCardStyle.scss';

const template = document.createElement('template');
template.innerHTML = `
    <div class="anime-card">
    <div>
        <img />
        <h3></h3>
        <div class="info">
            <p>
                <slot name="anime-description" >
            </p>
        </div>
    </div>
    </div>
`;

class AnimeCard extends HTMLElement{
    constructor(){
        super() // calling the constuctor of HTMLElement

        // ShadowDom
            //An important aspect of web components is encapsulation
            //being able to keep the markup structure, style, and behavior hidden and separate
            //from other code on the page so that different parts do not clash, and the code can 
            //be kept nice and clean. The Shadow DOM API is a key part of this, providing a way to 
            //attach a hidden separated DOM to an element

        this.attachShadow({mode:'open'})
        this.shadowRoot.appendChild(template.content.cloneNode(true))
        this.shadowRoot.querySelector('h3').innerHTML = this.getAttribute('anime-title')
        this.shadowRoot.querySelector('img').src = this.getAttribute('avatar')
        this.shadowRoot.querySelector('img').width = "300"

    }

    // Custom element lifecycle methods

    // constructor() : Called when an instance of the element is created or upgraded
    // connectedCallback() : Called everytime an element is inserted in DOM -> useful for setting event listeners
    // disconnectedCallback() : Called everytime an element is removed from DOM
    // attributeChangedCallback(attrName,oldValue,newValue) : Called when an attribute is added, removed, upgraded or replaced.
    something() {
        
      }

    // connectedCallback() {
    //     this.shadowRoot.querySelector('#elem').addEventListener('click', () => this.something());
    //   }
    
    //   disconnectedCallback() {
    //     this.shadowRoot.querySelector('#elem').removeEventListener();
    //   }
}
window.customElements.define('anime-card',AnimeCard)


const animeCard = async () => {

    let response = await fetch('https://kitsu.io/api/edge/anime').then(function (res) {
        return res.json()
    });

    let animes = response
    console.log(animes.data)


    let template = "";

    for (let index = 0; index < animes.data.length; index++) {
        let anime = animes.data[index];

        let anime_img = '';
        if (anime.attributes.coverImage != null) {
            anime_img = anime.attributes.coverImage.original;
        }
        let anime_title = '';
        if (anime.attributes.coverImage != null) {
            anime_title = anime.attributes.canonicalTitle;
        }
        let anime_description = '';
        if (anime.attributes.coverImage != null) {
            anime_description = anime.attributes.description;
        }

        template += `
                <anime-card avatar="${anime_img}" anime-title="${anime_title}">
                    <div slot="anime-description">${anime_description}</div>
                </anime-card>           
            `

    }

    return template
}

export default animeCard

My package.json

{
  "name": "mypackage",
  "version": "1.0.0",
  "description": "This is my package",
  "main": "index.js",
  "scripts": {
    "dev": "npm run clean && parcel public/index.html --out-dir development -p 3000",
    "build": "rimraf ./dist && parcel build public/*.html --out-dir dist --public-url ./",
    "clean": "rimraf ./development && rimraf ./.cache"
  },
  "author": "me",
  "license": "UNLICENSED",
  "devDependencies": {
    "@babel/core": "^7.12.16",
    "@babel/plugin-transform-runtime": "^7.12.15",
    "@babel/runtime-corejs2": "^7.12.13",
    "@babel/runtime-corejs3": "^7.12.13",
    "parcel-bundler": "^1.12.4",
    "sass": "^1.32.7",
    "sass-to-string": "^1.4.2"
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.