基于Svelte的Web框架Sapper为我们提供了很多现成的功能。路由,SSR渲染等等。但是,现在前端项目中不能使用使用Sass或Stylus等预处理器,是一个很不爽的事情,而svelte目前官方暂时真的没将这一块纳入初始模板,那么我们就只能自己动手了。
正文
直接使用我集成好的模板
1 2 3 4 5 6 7 8
| # for Rollup npx degit "KeiferJu/sapper-template-saas#rollup" my-app # for webpack npx degit "KeiferJu/sapper-template-saas#webpack" my-app cd my-app
npm install npm run dev & open http://localhost:3000
|
手动操作
以下文章以集成saas(scss)为例,其他的可以自己研究svelte-preprocess这个开源项目。
一. 集成saas预处理器
1. 安装依赖模块
1
| npm i -D svelte-preprocess autoprefixer node-sass
|
2. 修改配置文件
Sapper的配置里面具有两套构建方式,一种用于客户端,另一种用于服务器。所以要svelte-preprocess与Sapper一起使用,您需要在两种方式中都对其进行定义。
sapper(rollup)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| // rollup.config.js
// ... import sveltePreprocess from 'svelte-preprocess'; const preprocess = sveltePreprocess({ scss: { includePaths: ['src'], }, postcss: { plugins: [require('autoprefixer')], }, });
export default { client: { plugins: [ svelte({ // ... preprocess, // <-- ADD THIS LINE }), }, server: { plugins: [ svelte({ // ... preprocess, // <-- HERE TOO }), ], }, };
|
sapper(webpack)
webpack里面没有初始css的loader,我们顺便加进去,防止我们可能需要使用一些css样式。
下载css处理loader
1
| npm install -D style-loader css-loader sass-loade
|
sapper配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| //webpack.config.js
// ... const sveltePreprocess = require('svelte-preprocess');
const preprocess = sveltePreprocess({ scss: { includePaths: ['src'], }, postcss: { plugins: [require('autoprefixer')], }, });
module.exports = { client: { // ... module: { rules: [ { test: /\.(svelte|html)$/, use: { loader: 'svelte-loader', options: { preprocess, // ... } } }, // ----------------css处理(可以不使用)------------ { test: /\.css|.scss$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' },{loader: 'sass-loader'}], }, // ------------------------------------------------- ] }, // ... },
server: { // ... module: { rules: [ { test: /\.(svelte|html)$/, use: { loader: 'svelte-loader', options: { preprocess, // ... } } }, // ----------------css处理(可以不使用)------------ { test: /\.css|.scss$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' },{loader: 'sass-loader'}], }, // ----------------------------------------------- ] }, // ... }, // ... };
|
3. 使用方法
现在,你只要将lang=“scss”添加到样式标签上,就可以解析saas语法了
1 2 3 4 5 6
| <style lang="scss"> $color: red; div { color: $color; } </style>
|
二. vs code修正
我们完全可以正常使用scss了,但是有一个麻烦,vscode对这样的表示方式认为是错的。
首先,从VS Code中安装“ Svelte”扩展。
接下来,在项目的顶层创建一个svelte.config.js
1 2 3 4 5 6 7 8 9 10 11
| const sveltePreprocess = require('svelte-preprocess'); module.exports = { preprocess: sveltePreprocess({ scss: { includePaths: ['src'], }, postcss: { plugins: [require('autoprefixer')], }, }), };
|
后记
如果使用我集成好的模板,里面还加入了一些我常用的一些东西(时间总线和代理,引入了bulma样式框架).
使用saas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <style src="./style.scss"></style>
<!-- Or -->
<style lang="scss"> $color: red;
.test{ color: $color; } </style>
<!-- Or -->
<style lang="scss"> @import "./style.scss"; </style>
|
使用事件总线
还在里面加入了一个简单的事件总线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| /** * 事件总线 * * 使用方法: * 1. 引入组件类 * import EventBus from '../service/EventBus' * 2. 事件输出与订阅 * 输出:EventBus.emit('ww.myevent','nihao1') * * 订阅:EventBus.addEventListener('ww.myevent', (data) => { * name = data; * }) * */
|
使用代理(proxy.config.js)
path: 匹配路径,支持多个,例如[1,2,3]
target: 代理路径
1 2 3 4 5 6 7
| const proxyArray = [ { path: ['/test'], target: 'http://localhost:3000' }, ... ]
|