npm package.jsonファイルの依存関係、devDependencies、peerDependenciesの違いは何ですか?

2151
Vitalii Korsakov 2013-09-19 04:57.

このドキュメントは私の質問にほとんど答えていません。私はそれらの説明を理解していませんでした。誰かがもっと簡単な言葉で言うことができますか?簡単な言葉を選ぶのが難しい場合は、例を挙げてみませんか?

EDITも追加しましたpeerDependencies。これは密接に関連しており、混乱を招く可能性があります。

14 answers

重要な動作の違いの要約:

  • dependencies 両方にインストールされています:

    • npm install を含むディレクトリから package.json
    • npm install $package 他のディレクトリ
  • devDependencies は:

    • フラグを渡さない限り、npm installを含むディレクトリにもインストールされpackage.jsonます--productionGayan Charithの回答に賛成してください)。
    • オプションnpm install "$package"を指定しない限り、他のディレクトリにはインストールされません--dev
    • 推移的にインストールされません。
  • peerDependencies

    • 3.0より前:依存関係の互換性のない複数のバージョンが異なる依存関係によって使用される場合、欠落している場合は常にインストールされ、エラーが発生します。
    • 3.0から開始する予定(未テスト):が欠落している場合は警告を表示しnpm install、依存関係を手動で解決する必要があります。実行時に依存関係が欠落していると、エラーが発生します(@nextgentechで言及)
  • 推移性(npm package.jsonファイルの依存関係、devDependencies、peerDependenciesの違いは何ですか?言及):

    • dependencies 推移的にインストールされます。AがBを必要とし、BがCを必要とする場合、Cがインストールされます。そうでない場合、Bは機能せず、Aも機能しません。

    • devDependencies推移的にインストールされません。たとえば、AをテストするためにBをテストする必要がないため、Bのテストの依存関係を省略できます。

ここで説明されていない関連オプション:

devDependencies

dependencies実行する必要がありますが、devDependencies開発するためだけです。例:単体テスト、CoffeeScriptからJavaScriptへのトランスパイル、ミニファイ、...

パッケージを開発する場合は、パッケージをダウンロードし(たとえば、経由でgit clone)、を含むルートに移動して、次のコマンドをpackage.json実行します。

npm install

実際のソースがあるので、それを開発したいことは明らかです。したがって、デフォルトではdependencies(もちろん、開発するために実行する必要があるため)、devDependency依存関係もインストールされます。

ただし、パッケージをインストールして使用するだけのエンドユーザーの場合は、任意のディレクトリから実行します。

npm install "$package"

その場合、通常は開発の依存関係は必要ないため、パッケージを使用するために必要なものを取得するだけですdependencies

その場合に本当に開発パッケージをインストールしたい場合は、dev構成オプションをtrueに設定できます。コマンドラインから次のように設定できます。

npm install "$package" --dev

falseこれはあまり一般的ではないため、このオプションはデフォルトです。

peerDependencies

(3.0より前にテスト済み)

ソース:https//nodejs.org/en/blog/npm/peer-dependencies/

通常の依存関係では、依存関係の複数のバージョンを持つことができますnode_modules。依存関係の内部にインストールするだけです。

たとえばdependency1dependency2両方がdependency3異なるバージョンに依存している場合、プロジェクトツリーは次のようになります。

root/node_modules/
                 |
                 +- dependency1/node_modules/
                 |                          |
                 |                          +- dependency3 v1.0/
                 |
                 |
                 +- dependency2/node_modules/
                                            |
                                            +- dependency3 v2.0/

ただし、プラグインは、通常は他のパッケージを必要としないパッケージであり、このコンテキストではホストと呼ばれます。代わりに:

  • ホストにはプラグインが必要です
  • プラグインは、ホストが見つけることを期待する標準インターフェースを提供します
  • ホストのみがユーザーによって直接呼び出されるため、そのバージョンは1つである必要があります。

たとえばdependency1dependency2ピアがに依存しているdependency3場合、プロジェクトツリーは次のようになります。

root/node_modules/
                 |
                 +- dependency1/
                 |
                 +- dependency2/
                 |
                 +- dependency3 v1.0/

これdependency3は、package.jsonファイルで言及していなくても発生します。

これは制御反転のデザインパターンの例だと思います。

ピアの依存関係の典型的な例は、Grunt、ホスト、およびそのプラグインです。

たとえば、https://github.com/gruntjs/grunt-contrib-uglifyのようなGruntプラグインでは、次のように表示されます。

  • gruntpeer-dependency
  • 唯一のrequire('grunt')下にありtests/ます:それは実際にはプログラムによって使用されていません。

次に、ユーザーがプラグインを使用する場合、行をGruntfile追加することで暗黙的にプラグインを要求しますが、ユーザーは直接呼び出します。grunt.loadNpmTasks('grunt-contrib-uglify')grunt

各プラグインが異なるGruntバージョンを必要とする場合、これは機能しません。

マニュアル

ドキュメントは質問に非常によく答えていると思います。ノード/他のパッケージマネージャーに精通しているだけではないかもしれません。Rubyバンドラーについて少し知っているので、おそらくそれを理解するだけです。

重要な行は次のとおりです。

これらは、パッケージのルートからnpmlinkまたはnpminstallを実行するときにインストールされ、他のnpm構成パラメーターと同様に管理できます。このトピックの詳細については、npm-config(7)を参照してください。

そして、npm-config(7)の下で以下を見つけますdev

Default: false
Type: Boolean

Install dev-dependencies along with packages.
516
Gayan Charith 2015-07-06 00:06.

devDependenciesをインストールしたくない場合は、次を使用できます。 npm install --production

123
Dan Kohn 2013-09-19 08:39.

例として、mochaは通常devDependencyです。これは、本番環境ではテストが必要ないためですが、expressは依存関係になります。

79
qwertzguy 2017-09-06 07:27.

依存
関係コードから呼び出す関数を提供するライブラリなど、プロジェクトを実行するために必要な依存関係。
それらは推移的にインストールされます(AがBに依存している場合はCに依存し、Aにnpm installを実行するとBとCがインストールされます)。
例:lodash:プロジェクトはいくつかのlodash関数を呼び出します。

devDependencies
コードを取得して、JavaScript、テストフレームワーク、またはドキュメントジェネレーターにコンパイルするコンパイラーなど、開発中またはリリース中にのみ必要な依存関係。
それらは推移的にインストールされません(AがBに依存している場合dev-Cに依存している場合、Aにnpm installを実行するとBのみがインストールされます)。
例:grunt:プロジェクトはgruntを使用して自身をビルドします。

peerDependencies
プロジェクトが親プロジェクトにフックする、または変更する依存関係。通常、他のライブラリまたはツールのプラグインです。これは、親プロジェクト(プロジェクトに依存するプロジェクト)がフックするプロジェクトに依存していることを確認するためのチェックを目的としています。したがって、ライブラリBに機能を追加するプラグインCを作成する場合、プロジェクトAを作成する人は、Cに依存している場合、Bに依存している必要があります。
インストールされていない(npm <3でない限り)。をチェックしました。
例:grunt:プロジェクトはgruntに機能を追加し、gruntを使用するプロジェクトでのみ使用できます。

このドキュメントでは、ピアの依存関係について詳しく説明しています:https//nodejs.org/en/blog/npm/peer-dependencies/

また、npmのドキュメントは時間の経過とともに改善され、さまざまなタイプの依存関係についてより適切に説明されるようになりました:https//github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies

66
Mohammed Safeer 2016-01-08 20:41.

パッケージをdev依存関係としてpackage.jsonに保存するには:

npm install "$package" --save-dev

実行npm installすると、devDependenciesとの両方がインストールされますdependencies。インストールのdevDependencies実行を回避するには:

npm install --production
39
Amberlamps 2013-09-19 04:59.

開発にのみ必要なモジュールやパッケージがいくつかありますが、本番環境では必要ありません。それがドキュメントでそれを言うように:

誰かがプログラムでモジュールをダウンロードして使用することを計画している場合、おそらく、使用する外部テストまたはドキュメントフレームワークをダウンロードして構築することを望まないか、または構築する必要はありません。この場合、これらの追加アイテムをdevDependenciesハッシュにリストするのが最善です。

19
Jyoti Duhan 2017-09-30 05:36.

私にそれをより明確にした簡単な説明は次のとおりです:

アプリをデプロイするときは、依存関係にあるモジュールをインストールする必要があります。そうしないと、アプリは機能しません。devDependenciesのモジュールは、本番サーバーで開発していないため、本番サーバーにインストールする必要はありません。 リンク

15
Sîrbu Nicolae-Cezar 2018-02-17 01:40.

これらの依存関係の説明に関する私の見解を回答に追加したいと思います

  • dependencies コードベースで直接使用するために使用されます。通常は本番コードで使用されるもの、またはコードのチャンクです。
  • devDependencies ビルドプロセス、エンドコードの最終的な管理に役立つツール、サードパーティのテストモジュール(例:webpackのもの)に使用されます。
13
ruffin 2018-08-30 04:47.

peerDependencies上記のCiroに関するブログ投稿からこのスニペットを読むまで、私にはまったく意味がありませんでした。

[プラグイン]に必要なのは、プラグインとそのホストパッケージの間のこれらの「依存関係」を表現する方法です。「ホストパッケージのバージョン1.2.xに接続した場合にのみ機能するので、インストールする場合は、互換性のあるホストと一緒にあることを確認してください。」この関係をピア依存関係と呼びます。

プラグインはホストの特定のバージョンを想定しています...

peerDependenciesプラグイン用であり、機能を実行するために「ホスト」ライブラリを必要とするライブラリですが、ホストの最新バージョンがリリースされる前に作成された可能性があります。

それは私が書いた場合、であるPluginX v1ためHostLibraryX v3と歩いて、保証はありますPluginX v1時に動作しませんHostLibraryX v4(あるいはHostLibraryX v3.0.1解放されます)。

...しかし、プラグインはホストに依存しません...

プラグインの観点からは、ホストライブラリに関数を追加するだけです。プラグインに依存関係を追加するためにホストを実際に「必要」とはしません。プラグインは文字通りホストに依存しないことがよくあります。ホストがない場合、プラグインは無害に何もしません。

これはdependencies、プラグインにとって実際には正しい概念ではないことを意味します。

さらに悪いことに、私のホストが依存関係のように扱われた場合、同じブログ投稿で言及されているこの状況になります(この回答で構成されたホストとプラグインを使用するために少し編集されました):

しかし今、[HostLibraryXの最新バージョンをPluginXの依存関係として扱う場合]実行npm installすると、予期しない依存関係グラフが表示されます。

├── [email protected]
└─┬ [email protected]
  └── [email protected]

メインアプリケーションとは異なる[HostLibraryX] APIを使用するプラグインに起因する微妙な失敗は、想像に任せます。

...そしてホストは明らかにプラグインに依存していません...

...それがプラグインの要点です。これで、ホストがすべてのプラグインの依存関係情報を含めるのに十分な場合、問題は解決しますが、プラグイン管理という大きな新しい文化的問題も発生します。

プラグインの要点は、匿名でペアリングできることです。完璧な世界では、ホストにすべてを管理させることはきちんと整頓されていますが、図書館に猫の群れを要求することはありません。

階層的に依存していない場合は、おそらく内部依存のピアです...

代わりに、私たちは仲間であるという概念を持っています。ホストもプラグインも、もう一方の依存関係バケットにはありません。どちらも依存関係グラフの同じレベルにあります。


...しかし、これは自動化可能な関係ではありません。<<<マネーボール!!!

私は場合はPluginX v1期待して(、あるのピアのpeerDependencyを持っているがHostLibraryX v3、私はそう言うでしょう。あなたはきた最新の自動アップグレードした場合HostLibraryX v4(ノートのバージョンその4しているPlugin v1インストールされ、あなたは、右知っている必要がありますか?

npm 私のためにこの状況を管理することはできません-

「ねえ、あなたが使っているのがわかりますPluginX v1!私は自動的にHostLibraryXv4からv3にダウングレードしています、kk?」

...または...

「使用してPluginX v1いるようです。HostLibraryX v3前回の更新時にほこりの中に残っていたはずです。安全のため、自動的にアンインストールしますPlugin v1!! 1!

いいえ、npmはどうですか?!

したがって、npmはそうではありません。状況を警告し、HostLibraryX v4がに適したピアであるかどうかを判断できますPlugin v1


コーダ

グッドpeerDependencyプラグインでの管理は、実際には、より直感的にこの概念の作業を行います。ブログ投稿からまたもや...

アドバイスの1つ:ピアの依存関係の要件は、通常の依存関係の要件とは異なり、寛大である必要があります。ピアの依存関係を特定のパッチバージョンに固定しないでください。1つのChaiプラグインがChai1.4.1にピア依存し、別のプラグインがChai 1.5.0に依存している場合、作成者が怠惰で、Chaiの実際の最小バージョンを理解するのに時間を費やさなかったため、非常に煩わしいでしょう。と互換性があります。

11
cherankrish 2019-06-07 19:27.

要するに

  1. 依存関係- npm install <package> --save-prodアプリケーションに必要なパッケージを本番環境にインストールします。

  2. DevDependencies - npm install <package> --save-devインストールパッケージは、ローカルの開発およびテストのために必要

  3. 入力npm installするだけで、package.jsonに記載されているすべてのパッケージがインストールされます

したがって、ローカルコンピュータで作業している場合は、入力npm installして続行してください:)

8
user-needs-help 2020-02-05 04:12.

簡単な説明を見つけました。

短い答え:

依存関係 「...プロジェクトが本番環境で機能するために本当に必要な依存関係です。」

devDependencies 「...開発中に必要なものです。」

peerDependencies 「依存関係として使用できるように独自のライブラリを作成して公開する場合」

この投稿の詳細:https//code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies

6
Selva Ganapathi 2019-07-29 23:50.

依存関係と開発者の依存関係

開発依存関係は、開発中にのみ必要なモジュールですが、依存関係は実行時に必要です。アプリケーションをデプロイする場合は、依存関係をインストールする必要があります。そうしないと、アプリが機能しなくなります。プログラムの実行を可能にするコードから呼び出すライブラリは、依存関係と見なすことができます。

例-React、React-dom

開発依存関係モジュールは、そのマシンで開発する予定がないため、本番サーバーにインストールする必要はありません。コードをjavascriptに変換するコンパイラー、テストフレームワーク、ドキュメントジェネレーターは、開発中にのみ必要になるため、開発依存関係と見なすことができます。

例-ESLint、Babel、webpack

@ご参考までに、

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

npmに公開している場合は、正しいモジュールに正しいフラグを使用することが重要です。npmモジュールが機能する必要がある場合は、「-save」フラグを使用してモジュールを依存関係として保存します。モジュールが機能する必要はないがテストには必要なものである場合は、「-save-dev」フラグを使用します。

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev
0
Melchia 2018-07-07 02:47.

npmパッケージを配布しようとするときは、の使用を避ける必要がありますdependencies。代わりに、に追加するpeerDependenciesか、から削除することを検討する必要がありますdependencies

0
Quantalabs 2020-10-13 12:24.

依存関係

これらはパッケージを実行するために必要なパッケージであるため、ユーザーが実行するとインストールされます

 npm install PACKAGE-NAME

例として、プロジェクトでjqueryを使用した場合があります。誰かがjqueryをインストールしていない場合、それは機能しません。依存関係として保存するには、

 npm install --save

開発依存関係

これらは開発で使用する依存関係ですが、ユーザーが使用している場合は必要npm installありません。したがって、ユーザーが実行する場合、必要がないため、インストールされません。たとえば、mochaを使用してテストする場合、人々はmochaを実行する必要npm installがないため、インストールしません。開発依存として保存するには、

npm install PACKAGE --save-dev

ピアの依存関係

これらは、依存関係として使用できるように独自のライブラリを作成して公開する場合に使用できます。たとえば、パッケージを別のプロジェクトの依存関係として使用したくない場合、プロジェクトを依存関係として持つプロジェクトを誰かがインストールしたときにも、これらがインストールされます。ほとんどの場合、ピア依存関係は使用しません。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

今週のコミックコンですべての素晴らしいものに追いつく方法

今週のコミックコンですべての素晴らしいものに追いつく方法

サンディエゴコミックコンは今週開幕し、オタクのアナウンス、ポスター、予告編、お気に入りの番組や映画のからかいでいっぱいになります。SDCCは、コンベンションフロア全体の多くのパネルで行われているため、すべてに対応するのは難しい場合があります。

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

Googleの9千万ドルの和解はアプリ開発者にとってもGoogleにとっても勝利ですか?

小さなアプリ開発者は金曜日に発表された法的な和解でグーグルから9千万ドルをこじ開けた。アップルとの同様の合意に続いて熱くなった。金曜日のブログ投稿で、Googleは、Androidメーカーが市場での優位性を悪用してPlayストア経由でのアプリ内購入に対して30%の料金を不当に請求したと主張するアプリ開発者との訴訟を解決するために、9千万ドルを支払うことに合意したと述べました。

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

RadioShackのTwitterはハッキングされていませんでした、それはただの暗号のサクラです

今週、RadioShackのTwitterアカウントは、奇妙なものから完全にひどいものになりました。短い順序で、会社のフィード全体が、バイブレーター、「ビッグティット」(スペルミス)、有名人やその他の企業アカウントを荒らしているツイートなど、NSFW素材の真の山になりました。

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

ヒッグス粒子から10年後、物理学にとって次の大きなものは何ですか?

大型ハドロン衝突型加速器のトンネル内にあるコンパクトミュオンソレノイド(CMS)検出器。2012年7月4日、CERNの科学者たちは、1960年代に最初に提案された素粒子であるヒッグス粒子の観測を確認しました。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Un breve viaje espacial sobre conceptualizar el diseño

Complicarse la vida, mezclar churros con meninas (nada de ovejas) y encontrar valor en un trastero que adquiriste en una puja.

Un breve viaje espacial sobre conceptualizar el diseño

Bien. Hay un momento en toda salida al espacio exterior en el que de la tensión, la velocidad y las altas temperaturas derivadas del cruce de estratosfera a ionosfera se pasa a un momento de súbita calma, donde se despliega la vista completa del paisaje espacial que nos rodea.

Seguindo Todos os Protocolos (2022), de Fábio Leal

Seguindo Todos os Protocolos (2022), de Fábio Leal

Chico quer transar. Até aí, tudo bem.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

Language