先放項目地址: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包就成功發佈了
🎉🎉🎉