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>

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM