发表评论

登陆后发表评论

评论列表

还没有评论,快来做第一个评论的人吧

TSDX使用以及问题解决方案 | <p>最近浏览别人库时发现别人使用tsdx打包typescript,这个库确实挺有优势的,解决了ts打包成库的一些配置设置问题。 另外,还非常方便的整合了example和watch,文档,三位一体,相当方便。 今天来玩玩这个包。</p> <h2 id="-">官网</h2> <p><a href="https://www.npmjs.com/package/tsdx">https://www.npmjs.com/package/tsdx</a> <a href="https://tsdx.io/#quick-start">https://tsdx.io/#quick-start</a></p> <h2 id="-">安装</h2> <p>首先创建项目,使用:</p> <pre class="hljs"><code class="language-language"><span class="hljs-attribute">npx tsdx create mylib</span></code></pre> <p>然后有3个选项,basic,react,react-with-storybook。 由于一般用这玩意都需要演示,所以本篇选择第三个。</p> <pre class="hljs"><code class="language-language"><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span>: <span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span>: <span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:</span>: <span class="hljs-symbol">:</span><span class="hljs-symbol">:</span>: <span class="hljs-symbol">:</span><span class="hljs-symbol">:</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: <span class="hljs-symbol">:+</span>: +<span class="hljs-symbol">:+</span> +<span class="hljs-symbol">:+</span> +<span class="hljs-symbol">:+</span> +<span class="hljs-symbol">:+</span> +<span class="hljs-symbol">:+</span> +<span class="hljs-symbol">:+</span> +<span class="hljs-comment">#+ +#++:++#++ +#+ +:+ +#++:+</span> +<span class="hljs-comment">#+ +#+ +#+ +#+ +#+ +#+</span> <span class="hljs-comment">#+# #+# #+# #+# #+# #+# #+#</span> <span class="hljs-comment">### ######## ######### ### ###</span> √ Choose a template · react-with-storybook √ Created mylib √ Installed dependencies Awesome! You<span class="hljs-string">'re now ready to start coding. I already ran yarn install for you, so your next steps are: cd mylib To start developing (rebuilds on changes): yarn start To build for production: yarn build To test your library with Jest: yarn test Questions? Feedback? Please let me know! https://github.com/formium/tsdx/issues</span></code></pre> <h2 id="-">打包配置</h2> <p>正常情况,如果你写库的话,它是生成一个文件导出,如果你的代码里有骚操作,或者有多个文件,那么你需要修改其默认的rollup配置的output: rollup文档 新建tsdx.config.js</p> <pre class="hljs"><code class="language-language"><span class="hljs-keyword">module</span>.exports = { <span class="hljs-comment">// This function will run for each entry/format/env combination</span> rollup(<span class="hljs-built_in">config</span>, options) { console.log(<span class="hljs-built_in">config</span>, options); <span class="hljs-built_in">return</span> <span class="hljs-built_in">config</span>; <span class="hljs-comment">// always return a config.</span> }, };</code></pre> <p>正常情况,你的样式是和js是分离的,如果你想每个js里都有css或者less,scss,sass,那么也是需要修改配置:</p> <pre class="hljs"><code class="language-language"><span class="hljs-keyword">const</span> postcss = require(<span class="hljs-string">'rollup-plugin-postcss'</span>); <span class="hljs-keyword">module</span>.exports = { rollup(<span class="hljs-built_in">config</span>, options) { <span class="hljs-built_in">config</span>.plugins.push( postcss({ inject: false, extract: !!options.writeMeta, extensions: [<span class="hljs-string">".less"</span>, <span class="hljs-string">".css"</span>] }), ); <span class="hljs-built_in">return</span> <span class="hljs-built_in">config</span>; }, };</code></pre> <h2 id="example-bug">example BUG</h2> <p>example文件夹是用parcel进行构建,先进行安装,如果npm run start可以成功启动则忽略此段。 如果失败,提示:Invalid Version: undefined 由at new SemVer此处报错,则需要修改package.json配置:</p> <pre class="hljs"><code class="language-language"> <span class="hljs-string">"scripts"</span>: { <span class="hljs-string">"start"</span>: <span class="hljs-string">"parcel index.html"</span>, <span class="hljs-string">"build"</span>: <span class="hljs-string">"parcel build index.html"</span>, <span class="hljs-string">"preinstall"</span>: <span class="hljs-string">"npx npm-force-resolutions"</span> },</code></pre> <p>在script中增加preinstall,这样在npm i的时候,会强制执行。 package.json加入resolution:</p> <pre class="hljs"><code class="language-language"><span class="hljs-string">"resolutions"</span>: { <span class="hljs-string">"@babel/preset-env"</span>: <span class="hljs-string">"7.13.8"</span> }</code></pre> <p>这样再重新进行安装启动,则可以解决此问题。</p> <h2 id="stories">stories</h2> <p>由于选了第三个选项,所以自带了storybook,storybook更新挺快啊,上次文章讲的是5,现在已经6.2了。 可以看见有个文件夹是.storybook,这个就是其配置文件,在main.js下的addons中如果有@storybook/addon-essentials插件的,说明已经是6了,因为5是没有这个插件的。essential插件是老版的knobs(现在更名为control),docs插件,actions插件,viewport插件,background的插件的集合。确实也都是相当实用的插件。 由于以前写过了csf和mdx的写法,这里大同小异,就不写了。</p> <h2 id="size-limit">Size-limit</h2> <p>tsdx使用了size-limit去分析和压缩库 size-limit 地址 使用npm run size执行size-limit 使用npm run analyze 分析打包大小</p>