0.9.0 • Published 4 months ago

create-ejs-web v0.9.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

create-ejs-web

  • ejs 기반 웹 퍼블리싱 보일러 플레이트 입니다.

설치(npx)

  1. NodeJs v18 이상 설치해 주세요.
  2. 실행창( Windows + R ) 을 열고, "cmd" 를 입력, 엔터 해서 콘솔창(터미널)을 엽니다.
  3. 설치할 폴더로 이동합니다. cd 작업할 폴더위치
  4. 아래의 코드를 실행창에 넣어 실행(설치)합니다.
# ejs 보일러플레이트 설치
npx create-ejs-web my-web
# 설치된 폴더로 이동
cd my-web
# 개발환경 실행
npm run dev
  1. 브라우저에서 localhost:3000 을 입력해서 접속해봅니다.
  2. 혹시 오류나면 아래 추가내용 QA을 참고해주세요.
  3. 상세 설정은 "./gulp_modules/config.ts" 파일을 확인하세요.

스크립트 실행(npm run)

  • 자주쓰는 실행은 npm run 을 통해서도 가능합니다.
  • 상세한 실행 방법은 아래 gulp task를 참고하세요.
# gulp dev 와 동일
npm run dev
# gulp sitemap 와 동일
npm run sitemap
스크립트명연결 Gulp 테스크기능
npm run compilegulp compile작업폴더(src) 컴파일러 통합 실행
npm run watchgulp watch작업폴더(src) 감시자 통합 실행
npm run sitemapgulp sitemaphtml 컴파일 및 PAGEDOC 수집 통합실행 합니다.
npm run guidegulp guide:build가이드폴더(src/@guide)를 컴파일 및 산출물제출(배포)용으로 저장
npm run devgulp dev컴파일 및 감시자, 사이트맵생성, 서버시작 통합 실행
npm run buildgulp build작업폴더(src)를 산출물제출(배포)용으로 저장

Gulp Task

# gulp 테스크명 으로 실행
gulp dev
gulp html:compiler
Task NameSeries Tasksconfig.ts Const설명
html:compiler-htmlOptions작업폴더(src) 내 ".ejs" 또는 ".html" 을 ".html" 확장자인, ejs로 컴파일합니다.
html:watcher-htmlOptions작업폴더(src) 내 ".ejs" 또는 ".html" 가 변경 될 경우, 컴파일 되도록 감시합니다.
html:dist-htmlDistOptions페이지목록(sitemap.json)을 산출물제출(배포)용으로 저장합니다.
html:buildhtml:compiler, html:dist-html 산출물을 위한 통합빌드
scss:compiler-scssOptions작업폴더(src) 내 ".scss"을 컴파일합니다.
scss:watcher-scssOptions작업폴더(src) 내 ".scss"가 변경 될 경우 컴파일 되도록 감시합니다.
scss:dist-cssDistOptions임시폴더(.pub)의 ".css"을 산출물제출(배포)용으로 저장합니다.
scss:buildscss:compiler, scss:dist-css(scss) 산출물을 위한 통합빌드
ts:compiler-tsOptions작업폴더(src) 내 ".ts"을 컴파일합니다.
ts:watcher-tsOptions작업폴더(src) 내 ".ts"가 변경 될 경우 컴파일 되도록 감시합니다.
ts:dist-jsDistOptions임시폴더(.pub)의 ".js"을 산출물제출(배포)용으로 저장합니다.
ts:buildts:compiler, ts:dist-ts(js)파일 산출물을 위한 통합빌드
image:copy-imageOptions작업폴더(src) 내 ".jpg, .png, .gif, .ico"을 임시폴더로 복사합니다.
image:watcher-imageOptions작업폴더(src) 내 ".jpg, .png, .gif, .ico" 가 변경 될 경우 임시폴더로 복사합니다.
image:dist-imageDistOptions임시폴더(.pub)의 ".jpg, .png, .gif, .ico"을 산출물제출(배포)용으로 저장합니다.
image:buildimage:copy, image:dist-이미지파일 산출물을 위한 통합빌드
guide:compiler-guideOptions가이드폴더(src/@guide) 내 markdown(.md)파일을 컴파일합니다.
guide:dist-guideDistOptions임시폴더의 가이드(.pub/@guide)를 산출물제출(배포)용으로 저장합니다.
guide:build-guideDistOptions가이드파일 산출물을 위한 통합빌드
lib:copy-libOptions라이브러리 파일들을 임시폴더(.pub)로 복사합니다.
compilelib:copy, html:compiler, scss:compiler, ts:compiler, image:copy-컴파일러 통합 실행
watchhtml:watcher, scss:watcher, ts:watcher, image:watcher-감시자 통합 실행
server:dev-devServerOptions임시폴더(.pub)을 루트로 서버가 실행 됩니다. (기본포트 3000)
sitemap:save-htmlDistOptions, sitemapJson임시폴더(.pub)을 루트로 htmlDistOptions.src 하위의 html의 PAGEDOC 정보를 수집하여 sitemap.json을 생성합니다.
sitemap:dist-sitemapHtmlsitemap.json의 기반으로, 빌드용 sitemap.html 파일을 생성됩니다.
sitemaphtml:compiler, sitemap:save-html 컴파일 및 PAGEDOC 수집 통합실행 합니다.
devwatch, compile, sitemap:save, server:dev-컴파일 및 감시자, 사이트맵생성, 서버시작 통합 실행
disthtml:dist, scss:dist, ts:dist, image:dist-임시폴더(.pub)내의 파일을 산출물제출(배포)용으로 저장합니다.
buildcompile, sitemap:save, dist, sitemap:dist, guide:build-저장된 위치의 파일을 전체 산출물제출(배포)용으로 저장합니다.

사이트맵 수집

  • 개발환경 실행 npm run dev 후 사이트맵으로 빠른 이동을 시킬수 있습니다.
  • 사이트맵은 http://localhost:3000/sitemap.html 로 접근 가능 합니다.
  • 사이트맵은 PAGEDOC 형식으로, 작성되면 개발환경 실행시 자동으로 크롤링 됩니다.
  • 수동으로 가져오는 경우는 npm run sitemap 로 재수집 할수 있습니다.

가이드 작성

폴더구조

작업환경 폴더구조

./
+-- /.pub // ./src 에서 컴파일된 결과물 임시저장소, 개발서버의 루트,
+-- /build // 완료후 산출물 제출을 위해, 순수 html,css,js 로 컴파일 되는 곳
+-- /gulp_modules // gulp 실행을 위한 설정 및 실행모듈들
|   +-- @Types // gulp 환경용 types
|   +-- servers // 서버실행
|   +-- tasks // 컴파일 등 실행함수
|   +-- util // gulp 공통함수
|   +-- config.ts // gulp 환경설정 (가장중요)
+-- /src // 실제 퍼블리싱을 하는 소스의 위치 (아래 참고)

소스 폴더구조

./src
+-- /@guide // 웹퍼블리싱 가이드
|   +-- /assets // 가이드에 사용되는 css 등
|   |   +-- /lib // 코드스니핏 및 markdown css
|   +-- index.md // 가이드 인덱스 마크다운
+-- /assets
|   +-- /scss // scss을 모아주는(@import) 엔트리 성격의 scss
|   +-- /ts // typescript을 모아주는(import) 엔트리 성격의 ts
|   +-- /lib // 라이브러리 들
+-- /layouts
|   +-- /header // 헤더 공통 영역
|   +-- /footer // 풋터 공통 영역
+-- /pages // 페이지
|   +-- /main // 메인 페이지
|   +-- /sub // 서브 페이지 들
+-- /uikit // 컴포넌트 모음
+-- index.html // 초기 접속페이지
+-- sitemap.html // 사이트맵

QA

Q. npx를 실행하면 아래같은 에러가 나와요.

npm ERR! path C:\Users\사용자명\AppData\Roaming\npm
npm ERR! errno -4058
npm ERR! enoent ENOENT: no such file or directory ...
  • npm이 처음 설치되었거나, 글로벌 설치가 한번도 없었어서 그렇습니다.
  • 정확하겐, C:\Users\사용자명\AppData\Roaming\npm 폴더가 없어서 그래요.
npm i gulp-cli -g
  • 위의 구문을 터미널에서 실행해주세요. (gulp 글로벌 설치 입니다.)
  • gulp 설치가 완료되면, npx create-ejs-web my-web 로 재설치 해보세요.

Q. gulp 가 실행할수 없는 프로그램 이래요.

gulp : 'gulp' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.
위치 줄:1 문자:1
+ gulp
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (gulp:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
  1. npm i gulp-cli -g 로 gulp 을 글로벌설치 및 실행구문으로 등록해주세요.
  2. Gulp Task 중, dev 는 사실 npm run dev 로도 실행 할수 있어요.

Q. gulp 에서 보안오류가 나와요.

gulp : 이 시스템에서 스크립트를 실행할 수 없으므로 *** 파일을 로드할 수 없습니다. 
+ gulp dev
+ ~~~~
    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
  1. 검색에 powershell 을 찾고, "관리자 권한으로 실행" 을 눌러주세요.
  2. Set-ExecutionPolicy RemoteSigned을 입력하시고 엔터.
  3. "y" 하시고 엔터 하시면 됩니다.

Q. ** vulnerabilities (* moderate, ** high) 이런식으로 나와요.

  • CSS의 프로퍼티를 정렬해주는 라이브러리(gulp-csscomb) 가 오래된거라(...) 그렇습니다.

Q. ".pub" 폴더랑 "build" 폴더가 생겼어요.

  • ".pub" 폴더는 개발서버용 임시 폴더 입니다.(임시 이지만, 중요한 폴더예요. src보다 더 중요할수도 있음)
  • "build" 폴더는 배포용폴더 라고 하는데, 웹퍼블리싱 완료 후에 산출물 제출용이예요.

Q. "./index.html"이 build 되지 않아요.

  • 기본 설정상 "./" 하위에 있는 파일은 build 되지 않습니다.
  • "./page/" 하위에 있는 파일만 빌드됩니다. (config.ts의 htmlDistOptions 변수를 확인해주세요.)
  • 기본 설정 상 사이트맵(sitemap.html)만 별도의 설정을 통해 build 됩니다. (config.ts의 sitemapHtml 변수를 확인해주세요.)

참고하세요.

typescript(.ts)의 import

본 프로젝트에서 ".src/" 하위의 typescript(.ts) 의 import는 기존과 다릅니다.
본래는 ts파일의 export 된 객체(모듈)을 가져와 사용하는 개념이지만, 웹퍼블리싱은 보통 번들링을 하지 않고, 브라우저 자체에서의 import 기능을 쓰지 않기 때문에, 번들링이 아닌, 합치기(include) 개념으로 동작합니다.

ejs 와 html

본 프로젝트는 ejs와 html은 동일하게 취급합니다. 즉 html파일 안에 ejs을 사용해도 둥일하게 동작하며, 모든 ejs의 구문이 사용가능합니다. 단, "./src" 폴더 내에 사용된 ".ejs" 파일은 compile 시에 ".pub" 폴더 안에 ".html" 파일로 변경되서 저장됩니다.

html 의 <include> 구문 (확장된 엘리먼트)

ejs의 include 구문을 적용하면 에디터(ex : vscode)의 팔로우링크(Ctrl+클릭)시 해당 파일이동이 동작하지 않습니다. 해서 임의적으로 <include src="경로" options="전달객체"></include>를 추가적으로 커스텀(확장 엘리먼트 생성)해서 넣었습니다.

# "./src/sub/sub.html" 의 <include> 문 (컴파일 전, html 확장형식, 팔로우링크 가능)
<include src="./_inc/subCommon.html" options="{param:'sub.html 에서 파라매터 전달'}"></include>

# "./.pub/sub/sub.html" 의 <%- include %> 문 (컴파일 후, ejs 형식, 팔로우링크 불가)
<%-include(`./_inc/subCommon.html`,{param:'sub.html 에서 파라매터 전달'}) %>

제공환경

v0.9.x 업데이트 이력

v0.9.x 진행중 (TO-DO or TASKs)

  • "@src" 을 통한 src path 기능이 구현중입니다.
  • ./src/assets/ts 안에서 js 파일 호환가능
  • ./src/assets/scss 안에서 css 파일 호환가능

v0.9.0 업데이트 이력

  • 가이드 기능이 강력해졌습니다!
  • 이제 소스폴더(./src) 내에서 어떤 폴더든 *.guide.md 파일로 설명서를 만들수 있습니다.
  • 가이드 파일은 markdown 이지만, ejs 이기도 합니다! (include가 된다는 말입니다.)
  • 자세한 사항은 guide를 참고하세요.
  • 예제는 btn.guide.md 을 참고하세요.

앞으로 만들어질 기능들

  • sitemap:save 될 때 PAGEDOC 누락파일 검사
  • build 될 때 스크립트 오류 페이지 결과 리포트
  • build 될 때 W3C 검사도 함께 리포트
0.9.0

4 months ago

0.8.6

4 months ago

0.8.3

4 months ago

0.8.3-b

4 months ago

0.8.2

4 months ago

0.8.1

5 months ago

0.8.0

5 months ago

0.7.0

5 months ago

0.6.1

5 months ago

0.6.0

5 months ago

0.5.2

5 months ago

0.5.1

5 months ago