先放项目地址:https://github.com/Iroha1024/...react
Svelte 与诸如 React 和 Vue 等 JavaScript 框架相似,可是有一个关键的区别:Svelte 在构建/编译阶段将你的应用程序转换为理想的 JavaScript应用,而不是在运行阶段解释应用程序的代码。
https://www.sveltejs.cn/tutor...git
简而言之,编译出的js代码无需引入框架,可嵌入在其余代码中,用来写一些小组件十分方便es6
一个简单的组件就实现了,不过除了展现还无用处,你须要添加更多代码来改进你的组件github
<script> let name = 'world' </script> <h1>hello {name}!</h1>
实例化才能算的上一个应用,不然你的组件只能呆在展现页面里typescript
prop能够接收外部数据(也许你并不须要)npm
App.sveltejson
<script> epxort let name //能够设置初始值 </script> <h1>hello {name}!</h1>
index.jsapi
import App from './App.svelte' const app = new App({ target: document.body, props: { name: 'world' } })
$: variable
,用于依赖表达式后面的值,如当name
变化时,reactiveVal
会一同变化,而用其余方式(let
)则变量不会具备响应式。固然还有条件判断、语句一样可使用$:
声明 https://www.sveltejs.cn/tutor... bind:prop
形式声明,父组件才能获取响应式数据App.svelteapp
<script> import Child from './Child.svelte' let name = 'world' $: reactiveVal = 'reactive ' + name function logName() { console.log('name:', name) console.log('reactiveVal:', reactiveVal) } </script> <h1>{reactiveVal}</h1> <Child bind:name on:click={logName}/> <!-- 子组件改值,父组件内数据不响应 <Child name={name} on:click={logName}/> 简写 <Child {name} on:click={logName}/> -->
Child.svelte框架
click
)经过组件传递,则需在外层声明<script> export let name function changeName() { name = name === 'world' ? 'hello hello' : 'world' } </script> <!-- 需声明 --> <div on:click> <h1>hello {name}!</h1> <button on:click={changeName}> change name </button> </div>
//条件渲染 {#if x > 10} <p>...</p> {:else if 5 > x} ... {:else} ... {/if} //列表渲染 {#each things as thing (thing.id)} <p>...</p> {/each} <script> import { onMount, tick } from 'svelte' let div onMount(() => { //获取dom }) </script> <div bind:this={div}></div> //动态组件 <svelte:component this={componentName}/> async function fn() { //执行 await tick() //dom更新后再执行 }
svelte虽然由typescript编写,但很是遗憾的是目前并无完善的typescript支持......😅
这里使用typescript编写组件的api和数据的接口
首先须要一个npm帐户,而后是惯例的npm adduser
或者npm login
,登陆帐号,准备npm publish
,这时会有一些问题,难道全部文件都须要上传吗?npm怎么知道上传哪些文件?
package.json详情:https://www.npmjs.cn/files/pa...
files
表示须要上传的文件
package.json
README
LICENCE
CHANGELOG
这些文件会默认上传
main
表示commonJs模块的入口文件
module
表示es6模块的入口文件
types
表示d.ts文件
npm publish
前须要设置version
,确保版本号不一样(npm规定没法更新相同版本号),name
不能和已有包名重复
publish结束后,一个npm包就成功发布了
🎉🎉🎉