HTML을 사용하여 프런트엔드 에셋의 디자인 관리

11702 단어 HTMLNode.jsCSS

우선 자원 컴파일


최근 전방 자원을 개발하는 데 있어서 각종 컴파일러를 사용하는 경우가 증가한 것 같다.
구체적으로 말하면
JS・JSX
Browserify 및 babel을 사용한 모듈 관리·ES6·JSX
CSS
sass,postcss,autooprefixer로 변환
HTML
템플릿 엔진으로 변환
이를 임무로 삼아 파일 감시를 하고 임무 주자를 실행시키며 BrowserSync

이 문제들(내가 느낀 곳들)

  • Gulp 등 퀘스트 주자에게 플러그인이 필요한 곳
  • npm scripts는 명령행 환경의 영향을 받는다
  • 퀘스트 주자의 퀘스트 경로 부분은 쓰기 힘들다
  • 감시 경로와 자원 경로가 혼동(/dev/*.js≤/dev/bundle.js의)
  • 작업 감시 시작, 웹 서버 시작 후 2단계 번거로움
  • cdn을 사용할 때 버블을 이 정도
  • 로 묶을 수 없음

    HTML로 관리


    어쨌든 먼저 그림을 만들었다

    위의 그림에서'컴파일 처리'라고 쓰여 있는 것은 브라우저 리프와 바벨 등의 처리를 통해 기본적으로 흐름으로 읽고 토해낸 공동 처리만 실시하면 된다.
    (명령줄의 표준 입력과 출력도 OK)
    Mime 유형 등을 통해 판정 및 컴파일된 처리를 웹 서버에 포함합니다.
    릴리즈할 때 재생되는 프로세스와 달리, 링크 태그와script 태그를 바탕으로한 다음 컴파일한 다음 Bundle을 읽도록 합니다.
    HTML은 다음과 같습니다.
    전환 전.html
    <!DOCTYPE html>
    <html lang="ja">
        <head>
            <title>タイトル</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link href="https://hostname//framework-1.2.3.css" rel="stylesheet">
            <link href="css/1.css" rel="stylesheet">
            <link href="css/2.css" rel="stylesheet">
            <link href="css/3.css" rel="stylesheet">
        </head>
        <body>
            <div id="app"></div>
    
            <script src="https://hostname/framework-1.2.3.js"></script>
            <script src="js/1.js"></script>
            <script src="js/2.js"></script>
            <script src="js/3.js"></script>
        </body>
    </html>
    

    전환 후.html
    <!DOCTYPE html>
    <html lang="ja">
        <head>
            <title>タイトル</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link href="bundle.css" rel="stylesheet">
        </head>
        <body>
            <div id="app"></div>
    
            <script src="bundle.js"></script>
        </body>
    </html>
    
    defer와 async를 사용하는 경우를 제외하고 HTML은 위에서부터 순서대로 읽습니다.
    그러면 위에서 링크 탭과script 탭을 순서대로 읽고 컴파일 처리를 하면 버블만 같은 행동으로 바뀌어야 한다.(cheeerio 같은 걸 사용하면 쉬울 것 같아)
    cdn 등 원격 파일도 직접 읽고 한데 모을 수 있다.
    개발할 때 파일이 분산되고 컴파일 처리가 되어 개발용 웹 서버가 부담스럽지만 발매할 때 해제하면 좋겠다는 생각입니다.

    장점

  • 개발 시 웹 서버에서 컴파일되며 작업 드라이버는 사용하지 않음
  • HTML로 리소스 경로 관리
  • CDN 파일을 취합할 수도 있음(공식 환경에서는 네트워크에 연결되지 않는 경우도 있음)
  • 컴파일된 처리는 작업 시작기의 플러그인이 아니기 때문에 사용하기 쉽다
  • 결점

  • 출시 시 서버 측의 컴파일 처리를 해제해야 합니다
  • 출시 시 소스 매핑 제거 필요
  • 하면, 만약, 만약...


    cheerio를 가까스로 사용하면 라벨을 읽을 수 있습니다..
    (설치가 용이해 보임)
    sample.html
    <!DOCTYPE html>
    <html lang="ja">
        <head>
            <title>タイトル</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link href="css/1.css" rel="stylesheet" async>
            <link href="css/1.css" rel="stylesheet" defer>
            <link href="https://hostname//framework-1.2.3.css" rel="stylesheet">
            <link href="css/2.css" rel="stylesheet">
            <link href="css/3.css" rel="stylesheet">
        </head>
        <body>
            <part src="part/header.html">
            <div id="app"></div>
            <part src="part/footer.html">
    
            <script src="https://hostname/framework-1.2.3.js"></script>
            <script src="js/1.js"></script>
            <script src="js/2.js"></script>
            <script src="js/3.js"></script>
        </body>
    </html>
    
    컴파일 처리
    compile.js
    const compile = require('compile-tool')
    
    let config = {
        // Expressのstaticとかの為に
        prefix: "static/base",
        // コンパイル前のテンプレートエンジンがあれば指定
        templateEngine: function(file, cb) {
            // パスとバッファを格納
            let buffer = file.buffer
            let path = file.path
    
            this.push(//コンパイル後のBuffer)
    
            // 最後は、コールバックを呼び出し
            cb()
        },
        // 拡張子ごとのコンパイラを指定(インターフェイスは、templateEngineに渡す関数と同じ)
        compilers: {
            "js": jsCompiler,     // browserify babelify
            "jsx": jsCompiler,    // browserify babelify
            "css": cssCompiler    // postcss autoprefixer
        }
    }
    
    // HTMLのパスをglobで指定・configで初期化・outのパスは、config.prefixを指定しない場合のみ有効
    compile("./dev/*.html", config).out("./out/")
    
    이런 느낌이죠~

    좋은 웹페이지 즐겨찾기