• Svelte 迷途求索(一) —— 构建第一个 Svelte 应用


    Svelte 是一个全新的响应式框架,在开发体验上比较接近 Vue,具体的介绍可以参考尤雨溪大佬的评价

     

    一、创建应用

    Svelte 提供了模板项目,可以通过 degit 拉取到本地

    npx degit sveltejs/template <project-name>

    拉取项目默认使用的是 js,如果想用 ts 可以在项目根目录下执行:

    node scripts/setupTypeScript.js

    安装依赖,并启动项目

    npm install
    npm run dev

    然后在浏览器中打开 http://localhost:5000/ 就能访问对应的页面

    如果需要修改端口号,可以在 package.json 中的启动命令里修改环境变量 PORT

    "scripts": {
      "dev": "PORT=4000 rollup -c -w",
    },

    由于 Svelte 的作者也是 rollup 的作者,所以默认模板使用的是 rollup 打包

    如果想使用 vite, 可以使用 vite-plugin-svelte

     

     

    二、在组件中使用 less

    模板项目本身不携带任何插件,如果需要在 svelte 组件中写 less,需要安装相关的依赖:

    npm install svelte-preprocess-less less -D

    然后在 rollup.config.js 中添加相关的配置:

    // 模板项目会自带 svelte-preprocess, 如果没有, 可以手动安装
    import sveltePreprocess from 'svelte-preprocess';
    import { less as svelteLess } from 'svelte-preprocess-less';
     
    export default {
      plugins: [
        svelte({
          preprocess: sveltePreprocess({
            style: svelteLess(),
          }),
        }),
      ],
    };

    然后在组件中的 <style> 标签添加 lang="less"

    有个细节需要注意: 每个 .svelte 文件中 <style> 标签内的样式相互独立,就像 Vue 中的 <style scoped>

    比如下面的两个组件:

     最终渲染的结果,只有组件A的 title 样式生效

    再看看渲染之后 DOM 结构,就会发现具有 <style> 标签的组件,会携带额外的 class: svelte-hash

    最终生成的样式表也是这样的:

     那么应该如何处理公共样式呢?请往下看~

     

     

    三、完善 rollup.config.js

    1. 处理 import 引入的 less 文件

    首先安装 rollup 插件 

    npm install rollup-plugin-less -D

    然后在 rollup.config.js 中的 plugins 加入新的配置:

    import less from 'rollup-plugin-less';
    
    export default {
      plugins: [
        less({ 
          ooutput: 'public/build/bundle.css',
        }),
      ],
    };

    如果项目中使用了 rollup-plugin-css-only,  现在就可以删掉了

    将 less 配置直接替换掉原有的 css 配置即可


    这样就能直接编写 .less 文件, 然后在 main.js 中引入,从而解决上面提到的公共样式问题

     


    2. 配置路径别名

    路径别名可以解决一些很累赘的相对路径。首先安装依赖

    npm install @rollup/plugin-alias -D

    然后修改  rollup.config.js 配置

    import path from 'path';
    import alias from '@rollup/plugin-alias';
    
    const projectRootDir = path.resolve(__dirname);
    
    export default {
      plugins: [
        alias({
          entries: [
            {
              find: '@',
              replacement: path.resolve(projectRootDir, 'src')
            }
          ],
        }),
      ],
    };

    使用别名之后,上面引入 style/index.less 的相对路径就可以改成:

     

    四、打包构建

    可以直接使用 build 命令进行打包

    npm run build

    打包之后会按照 rollup.config.js 中的输出路径 output.file 生成目录

    在模板项目 sveltejs/template 中,输出路径是 public,所以打包之后的整个 public 就是一个完成的项目

    五、更多模板

    以上内容都是基于 sveltejs/template 这个官方应用模板进行开发,这是一个“纯净版”项目

    除此之外,在 svelte 的官方社区有很多开发者提交的模板项目

    如果你更习惯使用 webpack,也可以尝试 template-webpack

    如果你是一名成熟的 svelte 开发者,想开发一个 svelte 组件库,可以使用 component-template

    或者你需要一个比较完整且成熟的项目模板,可以考虑 svelte-commerce

    这些模板都可以使用 degit clone

    npx degit <github-repository> <project-name>

    根据需求构建合适的项目,然后就可以起飞了~

     

  • 相关阅读:
    mybatis批量更新报错
    Axure8破解码
    小程序开发-Step1
    2018新年计划
    java 写 Excel(不生成实体文件,写为流的形式)
    git 生成公钥 使用命令行无需输入用户名密码(windows)
    Node.js:上传文件,服务端如何获取文件上传进度
    Express:模板引擎深入研究
    windows下nginx的安装及使用
    Chrome开发者工具详解-Network面板
  • 原文地址:https://www.cnblogs.com/wisewrong/p/15668881.html
Copyright © 2020-2023  润新知