ノード実践学習:プロジェクトの全画像をブラウザでプレビュー
実際のフロントエンドプロジェクトの開発では、このようなシナリオがあるでしょう。新しい写真が紹介されるたびに、このリソースが参照されているかどうかがわからないので、写真が保存されているリソースをクリックして1つずつ見ていきます。実際の問題は次のとおりです:
1. 画像は 1 つのディレクトリに配置されていません。画像はどこにでも存在する可能性があり、見つけるのが困難です。
2時間と労力がかかります
3. 画像リソースは繰り返し導入される可能性があります
能力がある場合は、プロジェクトの画像リソースをまとめてリストしてください。を表示し、導入パスを簡単に確認できるようにすることで、開発の物理的な作業を大幅に節約できます。
そのような能力を身につけたい場合、何を考慮する必要がありますか?
要件分析
- ## は任意のフロントエンド プロジェクトに統合できますが、その場合は
npm パッケージ
が必要です
- ファイルを読み取り、どの画像が存在するかを分析し、
img タグを通じて画像リソースを HTML ファイルに書き込みます
- Createサーバーで html をレンダリングします。
fs
path
http モジュール。 [関連チュートリアルの推奨事項:
nodejs ビデオ チュートリアル 、プログラミング教育 ]
実装
#1 実装公開可能な npm パッケージ
- プロジェクトの作成
npm init
パッケージ名はtest-read- img
- 次のコードを package.json
"bin": { "readimg": "./index.js" },
- エントリ ファイルindex.jsに追加します。テスト コードを追加します。これは、このファイルが実行可能なノード ファイルであることを意味します。
#!/usr/bin/env node console.log('111')
ログイン後にコピー#デバッグを容易にするために、現在のモジュールをグローバルの node_modules モジュールにリンクします
readimgExecute
を実行すると、出力 111
が表示されます。これで、npm の使用が理解できました。コマンド パッケージを使用した後、プロジェクトがパッケージをインストールして実行コマンドを設定すると、設計された npm パッケージを他のプロジェクトで実行できるようになり、これは後で実装されます。
##2 他のプロジェクトに統合する
テスト プロジェクトを作成して実行する npm init
テスト パッケージを他のプロジェクトに統合する現在のプロジェクトで、
npm link test-read-img設定実行コマンド
- Execution
npm run test
を実行します。 - 現在のプロジェクトが、ファイルを読み取るパッケージのコードを実行していることがわかります。 現時点では 111 のみが出力されていますが、ファイルの読み取りにはまだ程遠いです。ファイルの読み取りを実装しましょう
"scripts": { "test": "readimg" },
3 ファイルの読み取り
test-read-img プロジェクト内で実行関数を宣言し、実行します。
"scripts": {
"test": "readimg"
},
ログイン後にコピー
各関数の機能について説明します"scripts": { "test": "readimg" },
- #getFileFun
: プロジェクトファイルを読み込み、読み込んだ画像ファイルのパスを返します。画像リソースは必要ありません。理由は後述します。
: テンプレート HTML ファイルを読み取り、
img を介して画像リソースを渡すことによって新しい HTML ファイルを生成します。
: 生成された HTML をサーバーに配置し、レンダリングします。 主な処理はこんな感じです。
実装getFileFun
関数
このファイルが何を行うべきかを正確に分析します
- すべてのファイルが完了するまでファイルをループします。検索後、画像リソースをフィルターで除外し、ファイルを非同期で読み取ります。ファイルが読み取られたことをどのように確認しますか?これは、
- promise
を使用して実装されています。ここでは、
getFileFun単一レイヤー ファイルの読み取りのみが実装されています.
、社内のnpmに公開しているのでご容赦ください。賢い人なら、それを再帰的に実装する方法を考えてみませんか?: 画像を返す前にファイルを最初に読み取る必要があるため、非同期コレクターは後で実行する必要があります。
具体的なコードは次のとおりです:
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> #!/usr/bin/env node const init = async () => { const readFiles = await getFileFun(); const html = await handleHtml(readFiles); createServer(html); } init();</pre><div class="contentsignin">ログイン後にコピー</div></div>
実装
handleHtml
ここを読んでください - -read-img
html ファイルをテストし、置き換えます。
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> const fs = require(&#39;fs&#39;).promises; const path = require(&#39;path&#39;); const excludeDir = [&#39;node_modules&#39;,&#39;package.json&#39;,&#39;index.html&#39;]; const excludeImg = [&#39;png&#39;,&#39;jpg&#39;,&#39;svg&#39;,&#39;webp&#39;]; let imgPromiseArr = []; // 收集读取图片,作为一个异步收集器 async function readAllFile(filePath) { // 循环读文件 const data = await fs.readdir(filePath) await dirEach(data,filePath); } async function handleIsImgFile(filePath,file) { const fileExt = file.split(&#39;.&#39;); const fileTypeName = fileExt[fileExt.length-1]; if(excludeImg.includes(fileTypeName)) { // 将图片丢入异步收集器 imgPromiseArr.push(new Promise((resolve,reject) => { resolve(`${filePath}${file}`) })) } } async function dirEach(arr=[],filePath) { // 循环判断文件 for(let i=0;i<arr.length;i++) { let fileItem = arr[i]; const basePath = `${filePath}${fileItem}`; const fileInfo = await fs.stat(basePath) if(fileInfo.isFile()) { await handleIsImgFile(filePath,fileItem) } } } async function getFileFun() { // 将资源返回给调用使用 await readAllFile(&#39;./&#39;); return await Promise.all(imgPromiseArr); } module.exports = { getFileFun }</pre><div class="contentsignin">ログイン後にコピー</div></div>
実装
ここで HTML ファイルを読み込み、サーバーに返します。
これは
- ファイルの表示のみを実装します。他のタイプの画像をサポートするにはどうすればよいですか?
- content-type
を処理するための注意事項を次に示します。
const fs = require('fs').promises; const path = require('path'); const createImgs = (images=[]) => { return images.map(i => { return `<div class='img-warp'> <div class='img-item'> <img src='${i}' /> </div> <div class='img-path'>文件路径 <span class='path'>${i}</span></div> </div>` }).join(''); } async function handleHtml(images=[]) { const template = await fs.readFile(path.join(__dirname,'template.html'),'utf-8') const targetHtml = template.replace('%--%',` ${createImgs(images)} `); return targetHtml; } module.exports = { handleHtml }
ログイン後にコピー
npm run test を実行すると、ブラウザの実行が確認できます。効果
上記は実装プロセスです。
では、効果は次のようになります:
npm public
思考
-
なぜファイルの非同期読み取りを使用するのでしょうか?
js はシングルスレッドであるため、ファイルを同期的に読み取ると、そこでスタックして他を実行できなくなります。
-
Promise を使用して画像を収集する理由
ファイルがいつ読み取られたかわからないため、非同期読み取りが完了したらファイルを使用できるからです
Promise.all
全体の処理 -
新しい HTML ファイルを読み取って、結果をブラウザに直接返してみませんか?
変換された
html を
test-read-img
ファイルに配置する場合、画像リソースも現在のディレクトリに生成する必要があります。そうしないと、HTML がread リソースが使用プロジェクト内にあるため、同等のパスのリソースが見つかりません。最後に、画像リソースを削除する必要がありますが、これも複雑さを増します;変換された
html を使用プロジェクト
に書き込むと、画像の直接パスを使用できるようになり、正しくロードされますが、HTML ファイルが追加されるため、プログラムの終了時に削除する必要があります。削除し忘れると、開発者によってリモートの場所に送信され、汚染が発生する可能性があります。提供されるプレビューは無害である必要があります。の。どちらのアプローチもお勧めできません。したがって、HTML リソースを直接返して相対ターゲット プロジェクト パスをロードしても影響はありません。
ノード関連の知識の詳細については、nodejs チュートリアル を参照してください。
以上がノード実践学習:プロジェクトの全画像をブラウザでプレビューの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

Django は、迅速な開発とクリーンなメソッドを重視した Python で書かれた Web アプリケーション フレームワークです。 Django は Web フレームワークですが、Django がフロントエンドなのかバックエンドなのかという質問に答えるには、フロントエンドとバックエンドの概念を深く理解する必要があります。フロントエンドはユーザーが直接対話するインターフェイスを指し、バックエンドはサーバー側プログラムを指し、HTTP プロトコルを通じてデータと対話します。フロントエンドとバックエンドが分離されている場合、フロントエンドとバックエンドのプログラムをそれぞれ独立して開発して、ビジネス ロジックとインタラクティブ効果、およびデータ交換を実装できます。

インターネット技術の発展に伴い、フロントエンド開発の重要性がますます高まっています。特にモバイル デバイスの人気により、効率的で安定しており、安全で保守が容易なフロントエンド開発テクノロジーが必要です。 Go 言語は、急速に発展しているプログラミング言語として、ますます多くの開発者によって使用されています。では、フロントエンド開発に Go 言語を使用することは可能でしょうか?次に、この記事ではフロントエンド開発にGo言語を使用する方法を詳しく説明します。まずはフロントエンド開発にGo言語が使われる理由を見てみましょう。多くの人は Go 言語は

Go 言語は、高速で効率的なプログラミング言語として、バックエンド開発の分野で広く普及しています。ただし、Go 言語をフロントエンド開発と結びつける人はほとんどいません。実際、フロントエンド開発に Go 言語を使用すると、効率が向上するだけでなく、開発者に新たな視野をもたらすことができます。この記事では、フロントエンド開発に Go 言語を使用する可能性を探り、読者がこの分野をよりよく理解できるように具体的なコード例を示します。従来のフロントエンド開発では、ユーザー インターフェイスの構築に JavaScript、HTML、CSS がよく使用されます。

C# 開発者としての私たちの開発作業には、通常、フロントエンドとバックエンドの開発が含まれますが、テクノロジーが発展し、プロジェクトが複雑になるにつれて、フロントエンドとバックエンドの共同開発はますます重要かつ複雑になってきています。この記事では、C# 開発者が開発作業をより効率的に完了できるようにする、フロントエンドとバックエンドの共同開発テクニックをいくつか紹介します。インターフェイスの仕様を決定した後、フロントエンドとバックエンドの共同開発は API インターフェイスの相互作用から切り離せません。フロントエンドとバックエンドの共同開発をスムーズに進めるためには、適切なインターフェース仕様を定義することが最も重要です。インターフェイスの仕様にはインターフェイスの名前が含まれます

インスタント メッセージングを実装する方法には、WebSocket、ロング ポーリング、サーバー送信イベント、WebRTC などが含まれます。詳細な紹介: 1. クライアントとサーバーの間に永続的な接続を確立してリアルタイムの双方向通信を実現できる WebSocket フロントエンドは WebSocket API を使用して WebSocket 接続を作成し、送受信によるインスタント メッセージングを実現できます。 2. Long Polling(リアルタイム通信を模擬する技術)など

Django: フロントエンド開発とバックエンド開発の両方を処理できる魔法のフレームワークです。 Django は、効率的でスケーラブルな Web アプリケーション フレームワークです。 MVCやMTVなど複数のWeb開発モデルをサポートし、高品質なWebアプリケーションを簡単に開発できます。 Django はバックエンド開発をサポートするだけでなく、フロントエンド インターフェイスを迅速に構築し、テンプレート言語を通じて柔軟なビュー表示を実現します。 Django はフロントエンド開発とバックエンド開発をシームレスに統合するため、開発者は学習に特化する必要がありません。

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。
