8bu
2 questions
1 answers
Avatar
1
8bu Beginner
8bu Beginner
Sử dụng IPFS để làm headless CMS cho blog?
Gần đây NFT nổi lên như là 1 hiện tượng, IPFS cũng nhờ đó được nhiều người biết tới hơn, trong đó có em. Trước đó em đã đọc qua cách hoạt động của IPFS &amp; biết tới service pinata.cloud thông qua project Snapshot của Fabien. <p> </p> <p> Vì có dịp đọc code &amp; contribute 1 ít trong project đó, em thấy họ sử dụng IPFS để store vote của user. Nên em tìm hiểu API của Pinata thì thấy có thể sử dụng nó để store content JSON, và quan trọng là ít tốn phí duy trì cho lượng traffic vừa và nhỏ. </p> <p> </p> <p> Không biết có mặt hạn chế nào trong cách dùng IPFS như em không, mong các anh/chị chia sẻ với ạ. </p>
Answer
Avatar
2
8bu Beginner
8bu Beginner
[Webpack] Build/Bundle issue - Vue project build cả những files không được import/sử dụng (unused)
Hiện tại mình đang thực hiện optimize build time cho 1 source code dự án đã phình khá to. Các helper module trong dự án đang được export &amp; sử dụng kiểu như này: <pre>// utils/index.ts export * from './helper-a.ts'; export * from './helper-b.ts'; export * from './helper-c.ts'; // components/Button.vue &lt;script lang="ts"&gt; import { HelperA } from '../utils'; &lt;/script&gt; </pre> <p> Nhưng khi build, bundle build ra bao gồm luôn cả helper-b và helper-c (mặc dù không được sử dụng). Mình có đọc vào phần tree shaking của webpack nhưng chưa tìm được cách giải quyết tối ưu nhất ngoài việc manual remove unused hoặc sửa lại cách export/import của toàn bộ source. Anh/chị/em có cách nào giải quyết tốt hơn xin gợi ý giúp mình với ạ. Mình cảm ơn. </p> <p> </p> <hr /> <p> </p> <p> Bổ sung cấu trúc utils &amp; code sample cho helper: </p> <pre>utils/ ┣ browser/ ┃ ┗ clipboard.ts ┣ data/ ┃ ┗ snapshot.ts ┣ date/ ┃ ┣ custom-format.ts ┃ ┣ format.ts ┃ ┣ index.ts ┃ ┣ now.ts ┃ ┗ toTimer.ts ┣ file/ ┃ ┣ file.ts ┃ ┗ image.ts ┣ mapper/ ┃ ┣ paginate.ts ┃ ┗ status-mapper.ts ┣ normalizer/ ┃ ┣ chain_id.normalize.ts ┃ ┣ index.ts ┃ ┣ number.normalize.ts ┃ ┗ path_name.normalize.ts ┣ number/ ┃ ┣ bignumber.ts ┃ ┣ calculation.ts ┃ ┣ comparison.ts ┃ ┣ format.ts ┃ ┣ index.ts ┃ ┗ shift.ts ┣ object/ ┃ ┣ getKeys.ts ┃ ┗ index.ts ┣ system/ ┃ ┣ async.ts ┃ ┣ promise.ts ┃ ┗ reTryCatch.ts ┣ token/ ┃ ┣ token-address.ts ┃ ┣ token-data-display.ts ┃ ┣ token-data.ts ┃ ┗ token-icon.ts ┣ ... ┣ campaign.ts ┣ contract.ts ┣ copy.ts ┣ index.ts ┣ misc.ts ┣ notification.ts ┣ promise.ts ┣ random.ts ┣ ref.ts ┣ string.ts ┣ viewport.ts ┗ string.ts</pre> <pre>----------------------------------------------- // utils/normalizer/path_name.normalize.ts export const normalizeFileName = (path: string) =&gt; {   return (path.split('/').pop() as string).replace(/\\.\\w+$/, '') as string; }; // utils/normalizer/index.ts export * from './chain_id.normalize'; export * from './path_name.normalize'; export * from './number.normalize'; // utils/index.ts export * from './browser/clipboard'; export * from './copy'; export * from './data/snapshot'; export * from './date'; export * from './file/file'; export * from './file/image'; export * from './mapper/paginate'; export * from './misc'; export * from './normalizer'; export * from './notification'; export * from './number'; export * from './object'; export * from './promise'; export * from './ref'; export * from './string'; export * from './system/async'; export * from './system/promise'; export * from './system/reTryCatch'; export * from './validate'; ....</pre>
Answer