2017-11-27 6 views
0

これは一般的に解決された問題でなければなりませんが、これまでのところGoogle/SO上ではほとんど見つけられません。npmパッケージを利用するための構築戦略

npm installを実行し、devDependenciesとランタイム依存関係を含む50以上のパッケージをフェッチすると、npmはnode_modules(必要に応じて)を作成し、それらのパッケージをそのフォルダ内に追加します。これは、node_modulesに含まれる無関係のファイルが何千もあることを意味します。これらのパッケージには、それぞれ独自のpackage.json、README.md、ミニファイル、ソースファイルなどが含まれています。アプリケーションはjquery.js(DEV用)とjquery.min.js(PROD用)これらすべての他のファイルを私たちのビルドに、したがってWebサーバーに含めることは無駄です。

npmパッケージを処理して、必要なファイルのみをユーザーに公開するという標準がありますか?私は多くの人がこの種の問題を抱えていると思いますが、これを簡単に行うことができるnpm構造体はありません。

以下を参照してください。黄色の強調表示されたファイルは、Productionで本当に気にかけている唯一のファイルですが、これらの余分なファイルもすべてソースコードを含めて取得します。

Screenshot

+0

[webpack](https://webpack.js.org/)。 – josh3736

+0

現在webpackを使用していますが、通常はES6というビジネスロジックをバンドルして、それをES5に移すためにbabelを使用しています。 npmパッケージ/ bowerパッケージ/ etcでこれを行うためのサポートが組み込まれていますか? "master"リストを使用せずにwebpackにどのファイルをつかむかを教えてください。 –

+0

はい、ノードで行うのと同じように依存関係を 'require'します。例えば ​​'var $ = require( 'jquery')'などです。 webpackは適切なjqueryファイルを見つけてバンドルします。 – josh3736

答えて

0

から最も一般的な解決策は、別のマシン上でアプリケーションをバンドルで構成され、その後、本番サーバー上で構築されたアーティファクトを公開することをダウンロードする必要がありますjsdomが必要です。

そこには素晴らしいJSバンドルがたくさんあります。私が個人的に使ったのは、Browserify,WebpackRollupです。すべてのすばらしいツール。

主なアイデアは、アプリケーションをノード環境に書き込んだり、バンドルしてブラウザに読み込み可能にすることです。

簡単なプロジェクトのために、私はBrowserifyが力と設定の容易さの間に非常に良い妥協を見つける。しかし、それは最終的に味の問題です。 :)

+0

今日、私たちはJenkinsノードからビルドして展開します。私たちが毎回更新されなければならない構築アーチファクトとしてコピーする必要のあるnpmパッケージの "マスター"リストを持っていないので、これらを適切に構築する方法の問題です。または2)npmパッケージのフォルダ構造が変更され、ビルドが中断されます。それは理にかなっていますか? –

+0

答えのいくつかの更新。 –

+0

私たちはすでにwebpackを使用していますので、可能ならばそれを使いたいと思います。しかし、私たちが最初に行う必要がある変更は、現在のところwebkitを使ってバンドルされているすべてのビジネスロジックですが、jqueryのようなnpmパッケージはHTMLの伝統的な '

0

編集package.jsonファイルと、すべての不要な依存関係を削除これを行うことにより

npm install --save

を行い、その後、それは地元のnode_modulesフォルダを作成し、だけに必要なパッケージをダウンロードしますそれ以外(グローバルnode_modulesフォルダではありません)

デフォルトでは、ノードチェックでローカルnode_modulesフォールドr。見つからない場合は、グローバルフォルダを使用します。

また、node_modulesフォルダ内のすべてのパッケージを公開することはありません。

jQueryのノードで動作するためには、ドキュメントとウィンドウが必要です:Node.jsの中にあなたrequire();彼らは

EDITを提出しない限り、実際に、彼らは使用されません。そのようなウィンドウはNodeにネイティブに存在しないので、jsdomのようなツールを使って嘲笑することができます。これはテストの目的に役立ちます。 https://www.npmjs.com/package/jquery

require("jsdom").env("", function(err, window) { 
    if (err) { 
     console.error(err); 
     return; 
    } 

    var $ = require("jquery")(window); 
}); 

のでjquery moduleは、通常のフロントエンドjqueryのと比較Node.jsのために少し異なるシーンの背後にあることを行います。

それはとてもあなたがここにもhttps://github.com/tmpvar/jsdom

+0

私のパッケージはローカルリポジトリに限定されていますが、 'npm install jquery'を実行すると、すべての場合に200個のファイル(ソースファイル、readmeファイル、package.jsonファイルなど)をインストールしますjquery.jsとjquery.min.jsが必要です。私が何を意味するのか? –

+0

私の編集を見ると、 'npm'でインストールしたときに' jquery'がどのように見えるかのスクリーンショットが含まれています。強調表示されている黄色のファイルは、私たちが環境にリリースしたあと気になるファイルですが、無関係のファイルがあります。 –

+0

@MattHintzkeああそうだ。今私の答えを更新しています –

0

私が読んだ内容のベースnpm install documentationあなたが望むようにインストールを操作するオプションはないと思います。パッケージは、パッケージ作成者がパッケージ化する方法をインストールします。

と言われていますが、第三者solutions like modcleanを探して、インストール後のインストールを正確に行う必要があります。プロジェクトディレクトリのルート

npm install modclean -g 
modclean 

でこのコマンドを実行している限り、あなたのテストのカバレッジが良好であるとして、ModCleanはあなたの必要性のために完璧になります。

関連する問題