ไม่ใช่คำถามเฉพาะอึก ๆ แต่เราจะรับข้อมูลจากไฟล์ package.json ภายใน gulpfile.js ได้อย่างไร ตัวอย่างเช่นฉันต้องการรับโฮมเพจหรือชื่อและใช้ในงาน
ไม่ใช่คำถามเฉพาะอึก ๆ แต่เราจะรับข้อมูลจากไฟล์ package.json ภายใน gulpfile.js ได้อย่างไร ตัวอย่างเช่นฉันต้องการรับโฮมเพจหรือชื่อและใช้ในงาน
คำตอบ:
อย่าใช้require('./package.json')
สำหรับกระบวนการดู การใช้require
จะแก้ไขโมดูลตามผลลัพธ์ของคำขอแรก ดังนั้นหากคุณกำลังแก้ไข package.json ของคุณการแก้ไขเหล่านั้นจะไม่ทำงานจนกว่าคุณจะหยุดกระบวนการดูและเริ่มต้นใหม่ สำหรับขั้นตอนการเฝ้าดูอึกควรใช้วิธีการของ bitlinguist เนื่องจากจะอ่านไฟล์ซ้ำและแยกวิเคราะห์ทุกครั้งที่งานของคุณถูกดำเนินการ
var fs = require('fs');
var json = JSON.parse(fs.readFileSync('./package.json'));
require
และลบแคชด้วยdelete require.cache[require.resolve(FILEPATH)];
นี่ไม่เฉพาะอึก
var p = require('./package.json')
p.homepage
อัพเดท:
โปรดทราบว่า "ต้องใช้" จะแคชผลการอ่านซึ่งหมายความว่าคุณไม่สามารถกำหนดได้เขียนลงไฟล์จากนั้นต้องการอีกครั้งและคาดว่าผลลัพธ์จะได้รับการอัปเดต
นี่เป็นทางออกที่ดี @Mangled Deutz ตัวฉันเองเคยทำอย่างนั้นครั้งแรก แต่มันไม่ได้ผล (ย้อนกลับไปในวินาทีนั้น) จากนั้นฉันลองวิธีแก้ปัญหานี้:
# Gulpfile.coffee
requireJSON = (file) ->
fs = require "fs"
JSON.parse fs.readFileSync file
ตอนนี้คุณควรเห็นว่านี่เป็นเพียงเล็กน้อย (แม้ว่าจะใช้งานได้) require('./package.json')
เป็นทางออกที่ดีที่สุด:
- อย่าลืมเพิ่ม "./" ไว้ด้านหน้าชื่อไฟล์ ฉันรู้ว่ามันง่าย แต่มันเป็นความแตกต่างระหว่างวิธีการที่ต้องการใช้งานได้และไม่ได้ผล
หากคุณกำลังทริกเกอร์อึกจาก NPM เช่นใช้ " npm run build " หรืออะไรสักอย่าง
(ใช้ได้เฉพาะกับทริกเกอร์การรันอึกโดย NPM)
process.env.npm_package_ วัตถุ
สิ่งนี้ควรถูกคั่นด้วยขีดล่างสำหรับวัตถุที่อยู่ลึกกว่า
หากคุณต้องการอ่าน config เฉพาะบางอย่างใน package.json เช่นคุณต้องการอ่าน config object ที่คุณสร้างใน package.json
scripts : {
build: gulp
},
config : {
isClient: false.
}
จากนั้นคุณสามารถใช้
process.env.npm_package_**config_isClient**