Svelte를 webpack으로 이동하여 TODO 목록을 작성해 보았습니다.

나는 svelte에 최근 만져 보았던 사람입니다. 틀리면 지적 부탁드립니다 m(_ _)m

내가 만든 totlist의 샘플
  • htps : // 기주 b. 코 m / 오쿠무라 켄고 / sゔㅇl


  • 참고
  • Vue 사용하면 초에 기억할 수 있는 Svelte 입문 - Qiita
  • Learn Svelte 3 by building a Todo List 앱
  • .svelte 파일 구문 하이라이트는 svelte-vscode를 사용하여 개발했습니다.
  • htps : // 기주 b. 코 m / 응 w 리 런 펑 / s

  • Install


    yarn add -D svelte svelte-loader css-loader mini-css-extract-plugin webpack webpack-cli webpack-dev-server
    
  • svelte
  • svelte-loader
  • svelte 구성 요소 용 로더

  • css-loader
  • css 로더

  • mini-css-extract-plugin
  • css를 추출 할 수있는 플러그인


  • Hello World!


    webpack.config.js 는 이쪽을 참고로 했습니다
  • htps : // 기주 b. 이 m / s ょ ぇ l js / mp
  • htps : // 기주 b. 이 m / s ゔ ぇ l js / s ょ ぇ l ぉ 아데 r

  • webpack.config.js
    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    
    module.exports = {
        mode: process.env.NODE_ENV || "development",
        module: {
            rules: [
                {
                    test: /\.svelte$/,
                    use: {
                        loader: "svelte-loader",
                        options: {
                            // tureにすることで、
                            // svelteファイルの<style>タグをのcssを
                            // 「test: /\.css$/」のフローでコンパイルできる
                            emitCss: true,
                        }
                    },
                },
                {
                    test: /\.css$/,
                    use: [
                        MiniCssExtractPlugin.loader,
                        "css-loader",
                    ],
                },
            ]
        },
        resolve: {
            extensions: [".mjs", ".js", ".svelte"],
        },
        plugins: [
            // 出力する際のファイル名を指定する
            new MiniCssExtractPlugin({ filename: "[name].css" }),
        ],
        devServer: {
            port: 9000,
            contentBase: "./",
            publicPath: "/dist/",
            open: true
        }
    };
    

    src/index.js
    import App from "./App";
    
    const app = new App({
        target: document.body,
    });
    
    export default app;
    

    src/App.svelte
    <script>
      let value = "world";
    </script>
    
    <style>
      h1 {
        color: purple;
      }
    </style>
    
    <h1>Hello {value} !</h1>
    

    index.html
    <!DOCTYPE html>
    <meta charset=UTF-8>
    <title>Document</title>
    <link rel=stylesheet href=dist/main.css>
    <script src=dist/main.js defer></script>
    
    yarn webpack-dev-server #http://localhost:9000/で確認できる
    



    TODO 목록 작성



    src/App.svelte
    <script>
      import { afterUpdate } from "svelte";
      afterUpdate(() => {
        document.querySelector(".js-todo-input").focus();
      });
    
      let todoItems = [];
      let newTodo = "";
    
      function addTodo() {
        newTodo = newTodo.trim();
        if (!newTodo) return;
    
        todoItems = [...todoItems, { text: newTodo, complete: false }];
        newTodo = "";
      }
    
      function toggleDone(index) {
        todoItems[index].complete = !todoItems[index].complete;
      }
    
      function removeTodo(index) {
        todoItems = todoItems.filter((_, i) => i !== index);
      }
    
      let value = "world";
    </script>
    
    <style>
      h1 {
        color: purple;
      }
    
      .done {
        text-decoration: line-through;
      }
    
      .delete {
        color: #777;
        text-decoration: none;
      }
    </style>
    
    <h1>Hello {value} !</h1>
    <form on:submit|preventDefault={addTodo}>
      <input type="text" class="js-todo-input" bind:value={newTodo} />
      <button type="submit">Add Todo</button>
    </form>
    <ul>
      {#each todoItems as todo, index}
        <li>
          <input
            id={index}
            type="checkbox"
            bind:checked={todo.complete}
            on:click={() => toggleDone(index)} />
          <span class={todo.complete ? 'done' : ''}>{todo.text}</span>
          <a
            href="#hoge"
            class="delete"
            on:click|preventDefault={() => removeTodo(index)}>
            [x]
          </a>
        </li>
      {/each}
    </ul>
    



    TODO 목록을 만들 수 있습니다. 끝까지 읽어 주셔서 감사합니다. m(_ _)m

    좋은 웹페이지 즐겨찾기