-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
非画像ファイルがアップロードされた時リンクで表示されるようにした #5659
Conversation
お疲れ様です。実装方針について1点質問があります。 先日のミーティングでご指摘いただいて、現在実装方針を改めて考え直しています。 前回までの実装方法では、 そして今考えているのは |
@keiz1213 基本的にはその方向でOKです〜。 拡張子はついてない場合があるのでこの辺りを使うのはどうでしょうか? |
回答ありがとうございます! 一応確認なのですが、そうなるとtextarea-markdownのリポジトリにPRを出すという流れで大丈夫でしょうか? |
@keiz1213 はい、そうです〜 |
わかりました!ありがとうございます! |
お疲れさまです。1点質問があります。 file-typeの代わりにmagic-bytes.jsを使っても良いか教えていただいたfile-typeパッケージをtextarea-markdownにインストールするとwebpackのコンパイル時にエラーが出るようになりました。このエラーの解決方法を探す過程でmagic-bytes.jsというパッケージを見つけ、試しにこのパッケージをtextarea-markdownにインストールして使用したところ、コンパイルも上手くいき、拡張子がないファイルでも画像ファイルか否かを判別できました。magic-bytes.jsではファイルのマジックナンバーでファイルの種類を判別しています。 file-typeのコンパイルエラーを解消してfile-typeを使うか、それともmagic-bytes.jsを使うか、どちらがよろしいでしょうか?個人的にはブラウザで無難に動くmagic-bytes.jsを使いたいと思っています。 以下、コンパイル時のエラー詳細です。 コンパイル時のエラーfile-typeをtextarea-markdownにインストールしてコンパイルするときに発生するエラーです。 ❯ npx webpack --mode development
asset main.js 588 KiB [emitted] (name: main)
asset node_stream.js 2.19 KiB [emitted]
runtime modules 8.06 KiB 11 modules
modules by path ./textarea-markdown/node_modules/ 440 KiB 102 modules
modules with errors 78 bytes [errors]
node:buffer 39 bytes [built] [code generated] [1 error]
node:stream 39 bytes [built] [code generated] [1 error]
./src/index.js 324 bytes [built] [code generated]
./textarea-markdown/src/textarea-markdown.js 3.75 KiB [built] [code generated]
./node_modules/punycode/punycode.es6.js 12.3 KiB [built] [code generated]
util (ignored) 15 bytes [built] [code generated]
util (ignored) 15 bytes [built] [code generated]
ERROR in ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_readable.js 46:13-37
Module not found: Error: Can't resolve 'buffer' in '/Users/nakamurakeizou/textarea5/textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "buffer": require.resolve("buffer/") }'
- install 'buffer'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "buffer": false }
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js 1:10-63
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/lib/index.js 4:26-52
@ ./textarea-markdown/node_modules/file-type/browser.js 2:0-68 36:37-60
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
ERROR in ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_writable.js 70:13-37
Module not found: Error: Can't resolve 'buffer' in '/Users/nakamurakeizou/textarea5/textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "buffer": require.resolve("buffer/") }'
- install 'buffer'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "buffer": false }
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js 4:0-55
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/lib/index.js 4:26-52
@ ./textarea-markdown/node_modules/file-type/browser.js 2:0-68 36:37-60
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
ERROR in ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js 15:15-32
Module not found: Error: Can't resolve 'buffer' in '/Users/nakamurakeizou/textarea5/textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "buffer": require.resolve("buffer/") }'
- install 'buffer'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "buffer": false }
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_readable.js 72:17-58
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js 1:10-63
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/lib/index.js 4:26-52
@ ./textarea-markdown/node_modules/file-type/browser.js 2:0-68 36:37-60
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
ERROR in ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/safe-buffer/index.js 3:13-30
Module not found: Error: Can't resolve 'buffer' in '/Users/nakamurakeizou/textarea5/textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/safe-buffer'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "buffer": require.resolve("buffer/") }'
- install 'buffer'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "buffer": false }
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/string_decoder/lib/string_decoder.js 26:13-42
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_readable.js 163:40-80 325:38-78
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js 1:10-63
@ ./textarea-markdown/node_modules/readable-web-to-node-stream/lib/index.js 4:26-52
@ ./textarea-markdown/node_modules/file-type/browser.js 2:0-68 36:37-60
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
ERROR in node:buffer
Module build failed: UnhandledSchemeError: Reading from "node:buffer" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.
at /Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:832:25
at Hook.eval [as callAsync] (eval at create (/Users/nakamurakeizou/textarea5/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/Users/nakamurakeizou/textarea5/node_modules/tapable/lib/Hook.js:18:14)
at Object.processResource (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:829:8)
at processResource (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:220:11)
at iteratePitchingLoaders (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:171:10)
at runLoaders (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:398:2)
at NormalModule._doBuild (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:819:3)
at NormalModule.build (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:963:15)
at /Users/nakamurakeizou/textarea5/node_modules/webpack/lib/Compilation.js:1371:12
@ ./textarea-markdown/node_modules/file-type/browser.js 1:0-35 44:27-38
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
ERROR in node:stream
Module build failed: UnhandledSchemeError: Reading from "node:stream" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.
at /Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:832:25
at Hook.eval [as callAsync] (eval at create (/Users/nakamurakeizou/textarea5/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at Object.processResource (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:829:8)
at processResource (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:220:11)
at iteratePitchingLoaders (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:171:10)
at runLoaders (/Users/nakamurakeizou/textarea5/node_modules/loader-runner/lib/LoaderRunner.js:398:2)
at NormalModule._doBuild (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:819:3)
at NormalModule.build (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:963:15)
at /Users/nakamurakeizou/textarea5/node_modules/webpack/lib/Compilation.js:1371:12
at NormalModule.needBuild (/Users/nakamurakeizou/textarea5/node_modules/webpack/lib/NormalModule.js:1253:32)
@ ./textarea-markdown/node_modules/file-type/core.js 1503:33-54
@ ./textarea-markdown/node_modules/file-type/browser.js 3:0-91 37:24-46 44:8-26 47:0-51:19 47:0-51:19 47:0-51:19 47:0-51:19
@ ./textarea-markdown/src/textarea-markdown.js 3:0-44
@ ./src/index.js 1:0-73 5:6-22
4 errors have detailed information that is not shown.
Use 'stats.errorDetails: true' resp. '--stats-error-details' to show it.
webpack 5.75.0 compiled with 6 errors in 493 ms 試したことwebpack.config.jsに以下の設定を追加することでコンパイルは上手くいきました。 : 参考 sindresorhus/file-type#502 target: "node" ですがtarget: "node"としているためかブラウザで実行すると動作しませんでした。 # ブラウザのコンソール
Uncaught ReferenceError: require is not defined ここから色々情報を集めていた時にmagic-bytes.jsを見つけ、textarea-markdownにインストールしてみたところ、コンパイルも問題なくできてファイルの種類の判別ができたのでこちらを使ったほうが無難だと思ったのですがどうでしょうか?色々調べていく中でfile-typeはNodejs用であり、ブラウザで動かすのは不向きなようにも感じました。 |
@keiz1213 動くのであればどちらのライブラリでも大丈夫です〜 |
回答ありがとうございます!magic-bytes.jsを使って進めたいと思います。 重ねて質問なのですが、ファイルのサイズを見やすく表示するためfilesize.jsというパッケージを追加しようと考えているのですが、textarea-markdownにインストールする時にエラーが出てしまいます。
|
大丈夫ではないです。環境に問題があるのか、もしくは追加したライブラリに問題があるのか、他のライブラリに変えるなど必要かもです。 |
@komagata
なるほどです。わかりました。 改めてエラーメッセージを読み、babel loaderを現状の7系から最新バージョン(9系)にアップデートするとエラーがでずにライブラリをインストールできるようになりましたが、この方法で進めてもよろしいでしょうか? 何度もお手数おかけして申し訳ありませんがよろしくお願い致します。 |
はい、お願いします〜 |
ありがとうございます!アップデートして進めていきます💪 |
467ea9c
to
572e0b5
Compare
お疲れさまです!こちらレビューをお願いできますでしょうか?全然急いでないのでいつでも大丈夫です😄 |
@keiz1213 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@keiz1213
お疲れ様です!動作確認できました🎉
npmへのPRも拝見しました👀 今回使用しているnpmを採用された経緯が当PR上のコメントやり取りで知ることができわかりやすかったです〜!Approveいたします!😊
確認ありがとうございます!
何度も質問することになると思ったのでPRの方に残してて良かったです😄 @komagata |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確認させて頂きました。OKです〜🙆♂️
難しいIssueありがとうございました〜!
issue
概要
pdfファイル等の非画像ファイル(png、jpeg、gif以外)をアップロードした時に表示が崩れていました。
これを表示が崩れないようにリンク(aタグ)として表示するようにしました。
備考
bootcampではサイト内テキストエリアをtextarea-markdownというパッケージを使って拡張しています。今回こちらのパッケージにPRをおくりマージしていただきました。
修正前は、アップロードされる際に生成されるマークダウンテキストがすべてimgタグ用(
![fileName](url)
)でした。それを、アップロードされる画像の種類に応じてimgタグ用とaタグ用([fileName](url)
)に振り分けるようにしました。rendering non image file into a link with file size komagata/textarea-markdown#31
ファイルの種類を判別するためにMagic Bytesというパッケージを使用しています
ファイルのサイズをわかりやすく表示するためにfilesize.jsというパッケージを使用しています
画像ファイルは
png
、jpeg
、gif
を想定しています。変更前
変更後
変更確認方法
feature/rendering-non-image-file-into-a-link
をローカルに取り込むbin/setup
を実行するrails s
でサーバーを起動する