202

npmを使用すると、-gオプションを使用してモジュールをグローバルにインストールできます。package.jsonファイルでこれをどのように行うことができますか?

これらはpackage.jsonファイルの依存関係であると仮定します

"dependencies": {
    "mongoose": "1.4.0",
    "node.io" : "0.3.3",
    "jquery"  : "1.5.1",
    "jsdom"   : "0.2.0",
    "cron"    : "0.1.2"
  }

実行するときはnpm install、グローバルにのみnode.ioインストールし、残りはローカルにインストールする必要があります。これにはオプションがありますか?

4

7 に答える 7

228

新しいメモ:おそらくこれをしたくないか、する必要はありません。おそらくやりたいことは、ビルド/テストなどのこれらのタイプのコマンド依存関係をdevDependenciespackage.jsonのセクションに入れることです。 package.jsonから何かを使用するときはいつでもscripts、devDependencies コマンド (node_modules/.bin 内) は、パスにあるかのように動作します。

例えば:

npm i --save-dev mocha # Install test runner locally
npm i --save-dev babel # Install current babel locally

次に、package.json で:

// devDependencies has mocha and babel now

"scripts": {
  "test": "mocha",
  "build": "babel -d lib src",
  "prepublish": "babel -d lib src"
}

次に、コマンド プロンプトで次のコマンドを実行できます。

npm run build # finds babel
npm test # finds mocha

npm publish # will run babel first

新しい NEW 注: しばらくの間npx、セクションに追加しなくても devDependencies コマンドを実行できる がありましたscripts(必要な場合)。例えば:

npx webpack

ただし、本当にグローバルにインストールしたい場合は、package.json のスクリプト セクションにプレインストールを追加できます。

"scripts": {
  "preinstall": "npm i -g themodule"
}

実際、私の npm install は npm install を再度実行します..これは奇妙ですが、うまくいくようです。

注:npmグローバル ノード パッケージのインストールが必要な場所で最も一般的なセットアップを使用している場合、問題が発生する可能性がありますsudo。1 つのオプションは、npm構成を変更して、これが不要になるようにすることです。

npm config set prefix ~/npmに追加して、 $HOME/npm/bin を $PATH に追加export PATH=$HOME/npm/bin:$PATHします~/.bashrc

別のおそらくより良いオプションは、nvmノードを管理するために使用することであり、その問題は発生しません。

于 2012-05-30T09:05:18.990 に答える
12

以下に説明する欠点があるため、受け入れられた回答に従うことをお勧めします。

npm install --save-dev [package_name]次のスクリプトを使用して実行します。

$ npm run lint
$ npm run build
$ npm test

私のオリジナルだが推奨されていない答えは次のとおりです。


グローバル インストールを使用する代わりに、パッケージをdevDependencies( --save-dev) に追加し、プロジェクト内の任意の場所からバイナリを実行できます。

"$(npm bin)/<executable_name>" <arguments>...

あなたの場合:

"$(npm bin)"/node.io --help

このエンジニアnpm-execは、ショートカットとしてエイリアスを 提供しました。このエンジニアは、 というシェルスクリプトを使用していenv.shます。ただし$(npm bin)、余分なファイルやセットアップを避けるために、直接使用することを好みます。

各呼び出しが少し大きくなりますが、次のことを防止して機能するはずです。

  • グローバルパッケージとの潜在的な依存関係の競合 (@nalply)
  • の必要性sudo
  • npm プレフィックスを設定する必要があります (とにかく使用することをお勧めします)

短所:

Jason が上で示したように、一般的タスク (ビルドやミニファイなど) を の「スクリプト」セクションに配置することをお勧めします。package.json

于 2014-07-12T08:42:53.560 に答える
8

npm_globals.txtの代わりに、のような別のファイルを使用できますpackage.json。このファイルには、次のような新しい行に各モジュールが含まれます。

mongoose@1.4.0
node.io@0.3.3
jquery@1.5.1
jsdom@0.2.0
cron@0.1.2

次に、コマンドラインで実行します。

< npm_globals.txt xargs npm install -g

正しくインストールされていることを確認します。

npm list -g --depth=0

これを行うべきかどうかについては、すべてユースケースに依存すると思います。ほとんどのプロジェクトでは、これは必要ありません。プロジェクトでpackage.jsonこれらのツールと依存関係を一緒にカプセル化することをお勧めします。

しかし、最近ではcreate-react-app、新しいマシンにジャンプするときに、常に他の CLI をグローバルにインストールしていることに気付きました。バージョン管理があまり重要でない場合、グローバル ツールとその依存関係を簡単にインストールできる方法があると便利です。

そして最近では、パッケージをグローバルにインストールする代わりにnpxnpm パッケージ runnerを使用しています。

于 2017-11-29T22:07:56.673 に答える
5

独自のスクリプトを作成して、グローバルな依存関係をインストールします。それほど時間はかかりません。package.json は非常に拡張可能です。

const { execSync } = require('child_process');
const fs = require('fs');

const package = JSON.parse(fs.readFileSync('package.json'));

let keys = Object.keys(package.dependencies);
let values = Object.values(package.dependencies);


for (let index = 0; index < keys.length; index++) {
    const key = keys[index];
    let value = values[index].replace("~", "").replace("^", "");

    console.log(`Installing: ${key}@${value} globally`,);
    execSync('npm i -g ' + `${key}@${value}`);
}

上記を使用して、以下のインラインにすることもできます!

以下のプリインストールを見てください。

{
  "name": "Project Name",
  "version": "0.1.0",
  "description": "Project Description",
  "main": "app.js",
  "scripts": {
    "preinstall": "node -e \"const {execSync} = require('child_process'); JSON.parse(fs.readFileSync('package.json')).globalDependencies.foreach(globaldep => execSync('npm i -g ' + globaldep));\"",
    "build": "your transpile/compile script",
    "start": "node app.js",
    "test": "./node_modules/.bin/mocha --reporter spec",
    "patch-release": "npm version patch && npm publish && git add . && git commit -m \"auto-commit\" && git push --follow-tags"
  },
  "dependencies": [
  },
  "globalDependencies": [
    "cordova@8.1.2",
    "ionic",
    "potato"
  ],
  "author": "author",
  "license": "MIT",
  "devDependencies": {
    "chai": "^4.2.0",
    "mocha": "^5.2.0"
  },
  "bin": {
    "app": "app.js"
  }
}

node の作成者は、package.json がプロジェクト ファイルであることを認めない場合があります。しかし、そうです。

于 2019-06-25T23:44:34.057 に答える
3

package.json のすべてのモジュールは ./node_modules/ にインストールされます

これが明示的に述べられているのを見つけることができませんでしたが、これはNPMの package.json リファレンスです。

于 2011-07-10T18:47:30.657 に答える