node_modulesフォルダの中にあるスクリプトをインクルードするには?
HTML ウェブサイトに node_modules
を含める際のベストプラクティスについて質問があります。
node_modulesフォルダの中にBootstrapがあると想像してください。さて、ウェブサイトの本番バージョンでは、
node_modules`フォルダの中にあるBootstrapのスクリプトとCSSファイルをどのように含めるのでしょうか?Bootstrapをフォルダに入れたまま、次のようなことをするのは意味があるのでしょうか?
<script src="./node_modules/bootstrap/dist/bootstrap.min.js"></script>
それとも、gulpファイルにルールを追加して、それらのファイルをdistフォルダにコピーしなければならないのでしょうか?あるいは、gulpが私のHTMLファイルからローカルのbootstrapを完全に削除し、CDNバージョンに置き換えるようにするのがベストでしょうか?
254
9
通常、サーバーの構造に関する内部経路を外部に公開したくはないでしょう。 しかし、
/scripts
という静的ルートを作っておくと、そのディレクトリからファイルを取得することができます。 つまり、ファイルが"./node_modules/bootstrap/dist/"
にある場合。 そうすると、ページ内のscriptタグは次のようになります。nodejsでexpressを使っていた場合、静的ルートはこのように簡単です。
すると、
scripts/xxx.js
からのブラウザのリクエストは、自動的にdist
ディレクトリの__dirname + /node_modules/bootstrap/dist/xxx.js
から取得されます。注:NPMの新しいバージョンでは、より多くのものをトップレベルに置き、それほど深く入れ子にしないので、もしあなたがNPMの新しいバージョンを使っているなら、パス名はOP'の質問と現在の回答で示されたものとは異なるものになるでしょう。しかし、コンセプトは同じです。 サーバーのドライブにあるファイルの物理的な位置を調べ、
express.static()
でapp.use()
を作成し、これらのファイルへの擬似パスを作成することで、実際のサーバーのファイルシステム構成をクライアントに公開しないようにします。このような静的なルートを作りたくない場合は、公開スクリプトをウェブサーバーが
/scripts
などのトップレベルの指定として扱うパスにコピーするのがよいでしょう。 通常、このコピーはビルド/デプロイメントプロセスの一部として行うことができます。もし、あるディレクトリにある特定のファイルだけを公開し、そのディレクトリにあるすべてのファイルを一緒に公開したくない場合は、次のような
express.static()
を使うのではなく、各ファイルに対して個別にルートを手動で作成します。そして、そのためのルートを作成するためのコード
また、スクリプトのルートを
/scripts
でまだ区切りたい場合は、次のようにします。そして、そのためのルートを作成するためのコード
パスのnpmモジュールを使って、次のようなことをします。
jfriend00で述べたように、サーバー構造を公開しないでください。 プロジェクト依存関係ファイルを「公開/スクリプト」のようなものにコピーできます。 これは、次のようにdep-linkerで非常に簡単に**実行できます。
ディレクトリ 'node_modules' がカレントディレクトリにない可能性があるので、動的にパスを解決する必要があります。
すばやく簡単なソリューションが必要な場合(およびgulpがインストールされている場合)。
gulpfile.js
で、必要なファイルをに入れる単純なコピーペーストタスクを実行します。/ public / modules /
ディレクトリ。これの欠点は、自動化されていないことです。 ただし、必要なものがコピーされた(そしてリストに保存された)いくつかのスクリプトとスタイルだけの場合は、これでうまくいくはずです。
より簡単な解決策でこの質問を更新したいと思います。 node_modulesへのシンボリックリンクを作成します。
node_modulesへのパブリックアクセスを許可する最も簡単な方法は、パブリックディレクトリ内からnode_modulesを指すシンボリックリンクを作成することです。 symlinkは、リンクが作成される場所にファイルが存在するかのようにします。
たとえば、ノードサーバーに静的ファイルを提供するためのコードがある場合。
__dirnameは/ path / to / appを指し、静的ファイルが/ path / to / app / distから提供されます。
node_modulesは/ path / to / app / node_modulesにあり、mac / linuxでこのようなシンボリックリンクを作成します。
または窓でこのように:
今のget request:
ファイルで応答を受け取ります。
これは本当にファイルです。
/ path / to / app / distのディレクトリが安全な場所ではない場合、おそらくgulpまたはgruntを使用したビルドプロセスからの干渉のため、リンクに別のディレクトリを追加し、次のような新しいserveStatic呼び出しを追加できます。 。
ノードで追加:
きれいな解決策は見つかりませんでした(すべてのnode_modulesのソースを公開したくありません)ので、それらをコピーするためにPowershellスクリプトを書きました。
以下の変更を行って、インデックスhtmlのファイルをAUTO-INCLUDEに変更しました。 そのため、フォルダにファイルを追加すると、index.htmlにファイルを含める必要なく、フォルダから自動的に取得されます。
これが「エクスプレス」サーバーでセットアップしたものです。
幸運を。..