[解決済み】node_modules フォルダにあるスクリプトをインクルードする方法は?
質問
を含める際のベストプラクティスについて質問があります。
node_modules
をHTMLのWebサイトに追加してください。
の中に Bootstrap が入っているとします。
node_modules
フォルダーに格納されます。さて、製品版の Web サイトでは、Bootstrap スクリプトと CSS ファイルを
node_modules
フォルダーに格納されます。Bootstrapをそのフォルダの中に入れておいて、以下のようなことをするのは意味があるのでしょうか?
<script src="./node_modules/bootstrap/dist/bootstrap.min.js"></script>
それとも、gulp ファイルにルールを追加して、これらのファイルを dist フォルダにコピーしなければならないのでしょうか?あるいは、gulpに、私のHTMLファイルからローカルのブートストラップを完全に削除させ、CDNバージョンに置き換えることが最善でしょうか?
解決方法は?
通常、サーバーの構造に関する内部パスは外部に公開したくありません。 しかし
/scripts
の静的ルートは、ファイルが存在するディレクトリからファイルを取得します。 ですから、もしあなたのファイルが
"./node_modules/bootstrap/dist/"
. そうすると、ページ内のscriptタグはこんな感じになるだけです。
<script src="/scripts/bootstrap.min.js"></script>
nodejsでexpressを使っていた場合、静的ルートはこのようにシンプルです。
app.use('/scripts', express.static(__dirname + '/node_modules/bootstrap/dist/'));
そして、ブラウザからのリクエストは
/scripts/xxx.js
は、自動的にあなたの
dist
ディレクトリを
__dirname + /node_modules/bootstrap/dist/xxx.js
.
注意:新しいバージョンのNPMは、より多くのものをトップレベルに置き、それほど深くネストしないので、新しいバージョンのNPMを使用している場合、パス名はOPの質問と現在の回答で示されたものとは異なるでしょう。しかし、コンセプトは同じです。 サーバーのドライブにあるファイルの物理的な場所を見つけ、その場所に
app.use()
で
express.static()
を使用して、これらのファイルへの擬似パスを作成することで、実際のサーバーのファイルシステム構成をクライアントに公開することはありません。
このような静的なルートを作りたくない場合は、公開スクリプトをウェブサーバーが扱えるパスにコピーする方が良いでしょう。
/scripts
または任意のトップレベル指定を使用することができます。 通常、このコピーはビルド/デプロイメントプロセスの一部として行うことができます。
あるディレクトリにある特定の1つのファイルだけを公開し、そのディレクトリにあるすべてのファイルを一緒に公開しないようにしたい場合は
express.static()
のようなものです。
<script src="/bootstrap.min.js"></script>
そして、そのためのルートを作成するためのコード
app.get('/bootstrap.min.js', function(req, res) {
res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');
});
または、まだスクリプトのルートを
/scripts
ということで、こんなこともできます。
<script src="/scripts/bootstrap.min.js"></script>
そして、そのためのルートを作成するためのコード
app.get('/scripts/bootstrap.min.js', function(req, res) {
res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');
});
関連
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み】MongoDBでコレクションを日付で並べ替えるには?
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] package.jsonの各依存関係を最新バージョンに更新する方法は?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] ローカルにインストールしたパッケージの実行ファイルを node_modules で使用するには?
-
[解決済み] package.json にないパッケージを node_modules フォルダから削除するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AWS lambda function エラー - モジュール 'index' をインポートできません。エラー
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] nodeファイルの先頭にある"/usr/bin/env node "は、具体的には何をするのですか?
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] TypeErrorです。リクエストパスにエスケープされていない文字が含まれています。
-
[解決済み] Json Web Token verify() return jwt malformed
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?