ติดตั้งการพึ่งพาทั้งในระดับโลกและระดับท้องถิ่นโดยใช้ package.json


189

ใช้ 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ติดตั้งแบบโกลบอลเท่านั้นส่วนที่เหลือควรติดตั้งแบบโลคัล มีตัวเลือกสำหรับสิ่งนี้หรือไม่?


11
คุณทำไม่ได้ อย่างไรก็ตามคุณสามารถตั้งค่า"preferGlobal": trueใน package.json สำหรับโมดูล
Raynos

ใช่ฉันรู้เกี่ยวกับ <code> preferGlobal </code> แต่นั่นจะติดตั้งการพึ่งพาทั้งหมดทั่วโลก ... ต่อไปขอบคุณ! ฉันเดาว่าจะไม่มีฟีเจอร์เช่นนั้น ...
Madhusudhan

3
ฉันไม่คิดว่ามันจะทำ มันติดตั้งโมดูลปัจจุบันอย่างเฉื่อยชา หากมีการตั้งค่าการพึ่งพาแต่ละรายการเป็นจริงมันอาจถูกติดตั้งทั่วโลก จริงๆคุณควรถาม @isaacs ใน # node.js
Raynos

3
การติดตั้งทั่วโลกสามารถสร้างนรกพึ่งพา พูดว่า package A ต้องการเวอร์ชัน 0.3.3 และ package B เวอร์ชัน 0.3.4 และทั้งคู่ไม่สามารถทำงานกับเวอร์ชันอื่นได้ จากนั้นคุณจะต้องใช้สองเครื่องเพื่อรองรับทั้งสองแพ็คเกจ
nalply

6
ไม่มีความคิดเห็นเหล่านี้ช่วยฉันด้วยปัญหานี้ ... มันจะดีถ้ารหัสคุณแสดงให้ฉันมากกว่าเพียงแค่"preferGlobal":true... ฉันไม่ทราบว่าจะวางไว้ที่ไหนใน package.json npmjs.org/doc/json.htmlเอกสาร NPM บอกว่า preferGlobal เหมาะสำหรับแพ็คเกจของคุณและการตั้งค่านั้นจะทำให้ติดตั้งแพคเกจของคุณเองในระดับโลก มันดูเหมือนว่ามีแนวทางมากกว่า
PPPaul

คำตอบ:


216

ใหม่หมายเหตุ:คุณอาจไม่ต้องการหรือต้องการทำเช่นนี้ สิ่งที่คุณอาจต้องการทำคือเพียงใส่ประเภทของการพึ่งพาคำสั่งเหล่านั้นสำหรับการสร้าง / ทดสอบ ฯลฯ ในdevDependenciesส่วนของ package.json ของคุณ ทุกครั้งที่คุณใช้บางอย่างจากscriptsใน package.json คำสั่ง 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

แต่ถ้าคุณต้องการติดตั้งทั่วโลกจริงๆคุณสามารถเพิ่มการติดตั้งล่วงหน้าในส่วนสคริปต์ของ package.json:

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

ดังนั้นจริง ๆ แล้วการติดตั้ง npm ของฉันดำเนินการติดตั้ง npm อีกครั้ง .. ซึ่งแปลก แต่ดูเหมือนว่าจะทำงาน

หมายเหตุ:คุณอาจมีปัญหาถ้าคุณกำลังใช้การตั้งค่าที่พบมากที่สุดสำหรับที่แพคเกจติดตั้งโหนดทั่วโลกจำเป็นต้องใช้npm sudoทางเลือกหนึ่งคือการเปลี่ยนของคุณnpmกำหนดค่าดังนั้นจึงไม่จำเป็น:

npm config set prefix ~/npmเพิ่ม $ HOME / NPM / bin ถึง $ PATH โดยท้ายที่คุณexport PATH=$HOME/npm/bin:$PATH~/.bashrc


3
ฉันไม่สามารถทำงานกับnpm i -g underscore-cliมันได้ มันให้คำเตือนเกี่ยวกับความผิดพลาด wd หมายถึงไดเรกทอรีทำงานฉันเดา เมื่อฉันทำด้วยตนเองในบรรทัดคำสั่งแล้วสิ่งต่าง ๆ เป็นไปด้วยดี แต่ฉันต้องการถ้าผู้ใช้สามารถจัดการกับการติดตั้งรหัสของฉันด้วยง่าย ๆnpm install
PPPaul

3
PPPaul - ฉันมีปัญหาเดียวกันเมื่อฉันลองใช้เคล็ดลับนี้อีกครั้งเมื่อเร็ว ๆ นี้ บางทีการตั้งค่าของฉันอาจแตกต่างไปในตอนนี้หรือใช้งานได้กับโมดูลบางตัวเท่านั้น ไม่อย่างนั้นฉันเดาว่ามีบางอย่างเปลี่ยนไปด้วย npm
Jason Livesay

9
นอกจากนั้นคุณสามารถตรวจสอบล่วงหน้าว่ามีการติดตั้งแพคเกจไว้แล้วหรือไม่npm list module -g || npm install module -gเนื่องจาก npm จะส่งคืนค่าออกที่เหมาะสม
m90

3
@CMCDragonkai: นี่ควรเป็นคำถามแยกต่างหาก แต่คุณใส่คำสั่งในสคริปต์และระบุสคริปต์เป็นคำสั่งเพื่อดำเนินการ (เช่น"preinstall" : "scripts/preinstall.sh")
พวกเราทุกคนโมนิก้า

1
@CMCDragonkai ต่อกรกับพวกเขาด้วย&&เช่นnpm install -g bower && npm install -g grunt-cli
Matsemann

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นามแฝงเป็นทางลัด วิศวกรนี้ใช้ shellscript env.shที่เรียกว่า แต่ฉันชอบที่จะใช้$(npm bin)โดยตรงเพื่อหลีกเลี่ยงไฟล์หรือการตั้งค่าเพิ่มเติม

แม้ว่าจะทำให้การโทรแต่ละครั้งมีขนาดใหญ่ขึ้นเล็กน้อย แต่ก็ควรใช้งานได้เพื่อป้องกัน:

  • ความขัดแย้งในการพึ่งพาที่อาจเกิดขึ้นกับแพคเกจทั่วโลก (@nalply)
  • ความต้องการ sudo
  • จำเป็นต้องตั้งค่าคำนำหน้า npm (แม้ว่าฉันจะแนะนำให้ใช้อย่างใดอย่างหนึ่งต่อไป)

ข้อเสีย:

  • $(npm bin) จะไม่ทำงานบน Windows
  • เครื่องมือที่ลึกลงไปในทรี dev ของคุณจะไม่ปรากฏในnpm binโฟลเดอร์ (ติดตั้งnpm-runหรือnpm ซึ่งหาได้)

ดูเหมือนว่าทางออกที่ดีกว่าคือการวางงานทั่วไป (เช่นการสร้างและการย่อขนาด) ในส่วน"สคริปต์"ของคุณpackage.jsonตามที่ Jason แสดงไว้ด้านบน


เพิ่มนามแฝงในของคุณ.bashrcได้อย่างง่ายดายเพิ่มbin/ไดเรกทอรีที่คุณตัวแปรสภาพแวดล้อม:PATH alias nodebin='export PATH=$(npm bin)/:$PATH'ดำเนินการnodebinแล้วคุณสามารถพิมพ์คำสั่งของคุณได้ตามปกติ
gitaarik

ฉันไม่รู้ว่าทำไมมันไม่ทำงานกับทีม แน่นอนคุณต้องตั้งค่าและหากคุณไม่ต้องการใช้นามแฝงที่คุณเลือก แต่มันไม่เจ็บที่จะใช้มันในทีม
gitaarik

9

นี่เก่าไปหน่อย แต่ฉันวิ่งไปตามข้อกำหนดดังนั้นนี่คือทางออกที่ฉันคิดขึ้นมา

ปัญหา:

ทีมพัฒนาของเราดูแลผลิตภัณฑ์เว็บแอปพลิเคชั่น. NET จำนวนมากที่เราย้ายไปยัง AngularJS / Bootstrap VS2010 ไม่ได้ยืมตัวเองอย่างง่ายดายไปยังกระบวนการสร้างที่กำหนดเองและนักพัฒนาของฉันกำลังทำงานเป็นประจำในผลิตภัณฑ์หลายรุ่นของเรา VCS ของเราคือการโค่นล้ม (ฉันรู้ฉันรู้ฉันกำลังพยายามย้ายไปที่ Git แต่เจ้าหน้าที่การตลาดที่น่ารำคาญของฉันกำลังเรียกร้องมาก) และโซลูชัน VS เดียวจะรวมโครงการแยกต่างหากหลายโครงการ ฉันต้องการให้พนักงานของฉันมีวิธีการทั่วไปในการเริ่มต้นสภาพแวดล้อมการพัฒนาโดยไม่ต้องติดตั้งแพคเกจโหนดเดียวกัน (อึก, ซุ้ม, ฯลฯ ) หลายครั้งในเครื่องเดียวกัน

TL; DR:

  1. ต้องการ "npm install" เพื่อติดตั้งสภาพแวดล้อมการพัฒนา Node / Bower ทั่วโลกรวมถึงแพคเกจที่จำเป็นในท้องถิ่นทั้งหมดสำหรับผลิตภัณฑ์. NET

  2. แพ็กเกจโกลบอลควรติดตั้งหากไม่ได้ติดตั้งไว้แล้ว

  3. ลิงค์ท้องถิ่นไปยังแพ็คเกจทั่วโลกจะต้องสร้างขึ้นโดยอัตโนมัติ

การแก้ไขปัญหา:

เรามีกรอบการพัฒนาร่วมกันโดยนักพัฒนาทั้งหมดและผลิตภัณฑ์ทั้งหมดดังนั้นฉันจึงสร้างสคริปต์ NodeJS เพื่อติดตั้งแพ็กเกจทั่วโลกเมื่อต้องการและสร้างลิงค์ท้องถิ่น สคริปต์อยู่ใน ".... \ SharedFiles" สัมพันธ์กับโฟลเดอร์ฐานผลิตภัณฑ์:

/*******************************************************************************
* $Id: npm-setup.js 12785 2016-01-29 16:34:49Z sthames $
* ==============================================================================
* Parameters: 'links' - Create links in local environment, optional.
* 
* <p>NodeJS script to install common development environment packages in global
* environment. <c>packages</c> object contains list of packages to install.</p>
* 
* <p>Including 'links' creates links in local environment to global packages.</p>
* 
* <p><b>npm ls -g --json</b> command is run to provide the current list of 
* global packages for comparison to required packages. Packages are installed 
* only if not installed. If the package is installed but is not the required 
* package version, the existing package is removed and the required package is 
* installed.</p>.
*
* <p>When provided as a "preinstall" script in a "package.json" file, the "npm
* install" command calls this to verify global dependencies are installed.</p>
*******************************************************************************/
var exec = require('child_process').exec;
var fs   = require('fs');
var path = require('path');

/*---------------------------------------------------------------*/
/* List of packages to install and 'from' value to pass to 'npm  */
/* install'. Value must match the 'from' field in 'npm ls -json' */
/* so this script will recognize a package is already installed. */
/*---------------------------------------------------------------*/
var packages = 
  {
  "bower"                      :                      "bower@1.7.2", 
  "event-stream"               :               "event-stream@3.3.2",
  "gulp"                       :                       "gulp@3.9.0",
  "gulp-angular-templatecache" : "gulp-angular-templatecache@1.8.0",
  "gulp-clean"                 :                 "gulp-clean@0.3.1", 
  "gulp-concat"                :                "gulp-concat@2.6.0",
  "gulp-debug"                 :                 "gulp-debug@2.1.2",
  "gulp-filter"                :                "gulp-filter@3.0.1",
  "gulp-grep-contents"         :         "gulp-grep-contents@0.0.1",
  "gulp-if"                    :                    "gulp-if@2.0.0", 
  "gulp-inject"                :                "gulp-inject@3.0.0", 
  "gulp-minify-css"            :            "gulp-minify-css@1.2.3",
  "gulp-minify-html"           :           "gulp-minify-html@1.0.5",
  "gulp-minify-inline"         :         "gulp-minify-inline@0.1.1",
  "gulp-ng-annotate"           :           "gulp-ng-annotate@1.1.0",
  "gulp-processhtml"           :           "gulp-processhtml@1.1.0",
  "gulp-rev"                   :                   "gulp-rev@6.0.1",
  "gulp-rev-replace"           :           "gulp-rev-replace@0.4.3",
  "gulp-uglify"                :                "gulp-uglify@1.5.1",
  "gulp-useref"                :                "gulp-useref@3.0.4",
  "gulp-util"                  :                  "gulp-util@3.0.7",
  "lazypipe"                   :                   "lazypipe@1.0.1",
  "q"                          :                          "q@1.4.1",
  "through2"                   :                   "through2@2.0.0",

  /*---------------------------------------------------------------*/
  /* fork of 0.2.14 allows passing parameters to main-bower-files. */
  /*---------------------------------------------------------------*/
  "bower-main"                 : "git+https://github.com/Pyo25/bower-main.git" 
  }

/*******************************************************************************
* run */
/**
* Executes <c>cmd</c> in the shell and calls <c>cb</c> on success. Error aborts.
* 
* Note: Error code -4082 is EBUSY error which is sometimes thrown by npm for 
* reasons unknown. Possibly this is due to antivirus program scanning the file 
* but it sometimes happens in cases where an antivirus program does not explain 
* it. The error generally will not happen a second time so this method will call 
* itself to try the command again if the EBUSY error occurs.
* 
* @param  cmd  Command to execute.
* @param  cb   Method to call on success. Text returned from stdout is input.
*******************************************************************************/
var run = function(cmd, cb)
  {
  /*---------------------------------------------*/
  /* Increase the maxBuffer to 10MB for commands */
  /* with a lot of output. This is not necessary */
  /* with spawn but it has other issues.         */
  /*---------------------------------------------*/
  exec(cmd, { maxBuffer: 1000*1024 }, function(err, stdout)
    {
    if      (!err)                   cb(stdout);
    else if (err.code | 0 == -4082) run(cmd, cb);
    else throw err;
    });
  };

/*******************************************************************************
* runCommand */
/**
* Logs the command and calls <c>run</c>.
*******************************************************************************/
var runCommand = function(cmd, cb)
  {
  console.log(cmd);
  run(cmd, cb);
  }

/*******************************************************************************
* Main line
*******************************************************************************/
var doLinks  = (process.argv[2] || "").toLowerCase() == 'links';
var names    = Object.keys(packages);
var name;
var installed;
var links;

/*------------------------------------------*/
/* Get the list of installed packages for   */
/* version comparison and install packages. */
/*------------------------------------------*/
console.log('Configuring global Node environment...')
run('npm ls -g --json', function(stdout)
  {
  installed = JSON.parse(stdout).dependencies || {};
  doWhile();
  });

/*--------------------------------------------*/
/* Start of asynchronous package installation */
/* loop. Do until all packages installed.     */
/*--------------------------------------------*/
var doWhile = function()
  {
  if (name = names.shift())
    doWhile0();
  }

var doWhile0 = function()
  {
  /*----------------------------------------------*/
  /* Installed package specification comes from   */
  /* 'from' field of installed packages. Required */
  /* specification comes from the packages list.  */
  /*----------------------------------------------*/
  var current  = (installed[name] || {}).from;
  var required =   packages[name];

  /*---------------------------------------*/
  /* Install the package if not installed. */
  /*---------------------------------------*/
  if (!current)
    runCommand('npm install -g '+required, doWhile1);

  /*------------------------------------*/
  /* If the installed version does not  */
  /* match, uninstall and then install. */
  /*------------------------------------*/
  else if (current != required)
    {
    delete installed[name];
    runCommand('npm remove -g '+name, function() 
      {
      runCommand('npm remove '+name, doWhile0);
      });
    }

  /*------------------------------------*/
  /* Skip package if already installed. */
  /*------------------------------------*/
  else
    doWhile1();
  };

var doWhile1 = function()
  {
  /*-------------------------------------------------------*/
  /* Create link to global package from local environment. */
  /*-------------------------------------------------------*/
  if (doLinks && !fs.existsSync(path.join('node_modules', name)))
    runCommand('npm link '+name, doWhile);
  else
    doWhile();
  };

ตอนนี้ถ้าฉันต้องการอัปเดตเครื่องมือทั่วโลกสำหรับนักพัฒนาของเราฉันจะอัปเดตวัตถุ "แพ็คเกจ" และตรวจสอบในสคริปต์ใหม่ นักพัฒนาของฉันตรวจสอบและเรียกใช้ด้วย "node npm-setup.js" หรือโดย "npm install" จากผลิตภัณฑ์ใด ๆ ที่อยู่ระหว่างการพัฒนาเพื่ออัปเดตสภาพแวดล้อมทั่วโลก ใช้เวลาทั้งหมด 5 นาที

นอกจากนี้เพื่อกำหนดค่าสภาพแวดล้อมสำหรับนักพัฒนาใหม่ก่อนอื่นพวกเขาจะต้องติดตั้ง NodeJS และ GIT สำหรับ Windows รีบูตเครื่องคอมพิวเตอร์ตรวจสอบโฟลเดอร์ "ไฟล์ที่ใช้ร่วมกัน" และผลิตภัณฑ์ใด ๆ ที่อยู่ระหว่างการพัฒนาและเริ่มทำงาน

"package.json" สำหรับผลิตภัณฑ์. NET เรียกใช้สคริปต์นี้ก่อนติดตั้ง:

{ 
"name"                    : "Books",
"description"             : "Node (npm) configuration for Books Database Web Application Tools",
"version"                 : "2.1.1",
"private"                 : true,
"scripts":
  {
  "preinstall"            : "node ../../SharedFiles/npm-setup.js links",
  "postinstall"           : "bower install"
  },
"dependencies": {}
}

หมายเหตุ

  • หมายเหตุการอ้างอิงสคริปต์ต้องการการฟอร์เวิร์ดสแลชแม้ในสภาพแวดล้อม Windows

  • "npm ls" จะให้ "npm ERR! extraneous:" ข้อความสำหรับแพ็คเกจทั้งหมดที่เชื่อมโยงในเครื่องเนื่องจากไม่ได้อยู่ในรายการใน "package.json" "การพึ่งพา"

แก้ไข 1/29/16

npm-setup.jsสคริปต์ที่อัพเดตด้านบนได้รับการแก้ไขดังนี้:

  • แพ็คเกจ "version" in var packagesตอนนี้เป็นค่า "package" ที่ส่งไปยังnpm installบนบรรทัดคำสั่ง นี่เป็นการเปลี่ยนแปลงเพื่ออนุญาตให้ติดตั้งแพคเกจจากที่อื่นนอกเหนือจากที่เก็บที่ลงทะเบียน

  • หากแพ็กเกจถูกติดตั้งแล้ว แต่ไม่ใช่แพ็คเกจที่ร้องขอแพ็กเกจที่มีอยู่จะถูกลบและแพ็กเกจที่ถูกต้องจะถูกติดตั้ง

  • ด้วยเหตุผลที่ไม่ทราบสาเหตุเอ็นพีพีจะโยนข้อผิดพลาด EBUSY (-4082) เป็นระยะเมื่อทำการติดตั้งหรือลิงก์ ข้อผิดพลาดนี้ติดอยู่และคำสั่งดำเนินการอีกครั้ง ข้อผิดพลาดเกิดขึ้นน้อยครั้งที่สองและดูเหมือนจะชัดเจนขึ้นเสมอ


นี่คือผู้ช่วยชีวิต @ sthames42! ฉันพยายามใช้เวลาหลายชั่วโมงเพื่อหาวิธีการทำสิ่งนี้ ชัดเจนครอบคลุมและยอดเยี่ยมโดยทั่วไป #points Questions: (a) ทำไม Bower ใน postinstall เมื่อมันอยู่ในรายการแพ็คเกจแล้ว? (b) จะไม่เชื่อมโยงแพกเกจทั่วโลกในพื้นที่ได้อย่างไร? ไม่รวม "ลิงก์" ในคำสั่งใช่ไหม
MaxRocket

@ MaxRocket: ดีใจที่ฉันสามารถช่วย ฉันได้ปรับปรุงคำตอบเพื่อรวมล่าสุดของฉันซึ่งทำงานได้ดีขึ้นมาก คำตอบ: (a) คำสั่ง 'bower install' ทำงานหลังจาก 'ติดตั้ง npm' เสร็จสิ้นเพื่อติดตั้งคอมโพเนนต์ Bower ที่แสดงในไฟล์ bower.json ที่ไม่ได้แสดงไว้ที่นี่ ฉันต้องการให้คนของฉันสามารถพิมพ์ 'การติดตั้ง npm' และตั้งค่าสภาพแวดล้อมของพวกเขาได้อย่างเต็มที่โดยไม่ต้องพิมพ์คำสั่งอื่น (b) ใช่
sthames42

รุ่นปัจจุบันของสคริปต์นี้จะยังคงอยู่ในขณะนี้ที่นี่
sthames42

6

คุณสามารถใช้ไฟล์แยกต่างหากเช่นแทนที่จะ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 อื่น ๆ ทั่วโลกเมื่อฉันกระโดดขึ้นเครื่องใหม่ เป็นเรื่องดีที่มีวิธีง่าย ๆ ในการติดตั้งเครื่องมือทั่วโลกและการอ้างอิงเมื่อการกำหนดเวอร์ชันไม่สำคัญ

และทุกวันนี้ฉันกำลังใช้npxงานนักวิ่งแพ็กเกจ npmแทนที่จะติดตั้งแพ็คเกจทั่วโลก


3

โมดูลทั้งหมดจาก package.json ได้รับการติดตั้งเป็น. / node_modules/

ฉันไม่สามารถหานี้ระบุไว้อย่างชัดเจน แต่นี้เป็นข้อมูลอ้างอิงสำหรับ package.json NPM


1

สร้างสคริปต์ของคุณเองเพื่อติดตั้งการพึ่งพาระดับโลก ใช้เวลาไม่มาก package.json สามารถขยายได้ค่อนข้าง

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

JSON.parse(fs.readFileSync('package.json'))
     .globalDependencies.foreach(
         globaldep => execSync('npm i -g ' + globaldep)
     );

การใช้ข้างต้นคุณสามารถทำให้เป็นแบบอินไลน์ด้านล่าง!

ดูที่ preinstall ด้านล่าง:

{
  "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"
  }
}

ผู้เขียนของโหนดอาจไม่ยอมรับ package.json เป็นไฟล์โครงการ แต่มันคือ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.