자바 스크립트 : gulpfile.js에서 package.json 데이터 가져 오기


101

gulp 특정 질문은 아니지만 gulpfile.js 내의 package.json 파일에서 정보를 어떻게 얻을 수 있습니까? 예를 들어 홈페이지 나 이름을 가져 와서 작업에 사용하고 싶습니다.

답변:


116

require('./package.json')감시 프로세스에 사용하지 마십시오 . 를 사용 require하면 첫 번째 요청의 결과로 모듈이 해결됩니다. 따라서 package.json을 편집하는 경우 해당 편집은 감시 프로세스를 중지하고 다시 시작하지 않는 한 작동하지 않습니다. gulp watch 프로세스의 경우 파일을 다시 읽고 작업이 실행될 때마다 파싱하므로 bitlinguist의 방법을 사용하는 것이 가장 좋습니다.

var fs = require('fs');

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

4
"require"가 결과를 캐시한다는 데 동의했습니다 (읽기 / 수정 / 다시 읽으려는 경우에는 적합하지 않음). 그렇다고 모든 경우에 나쁜 해결책이되는 것은 아닙니다. OP는 정보를 읽고 싶다고 명시 적으로 언급했습니다.
Mangled Deutz 2015

2
사용 require및 캐시 제거가 가능합니다.delete require.cache[require.resolve(FILEPATH)];
curly_brackets

@KennethB 왜 별도의 답변으로하지 않습니까? 더 많은 찬성 투표를 유도 할 것입니다.
kaiser

138

이것은 꿀꺽 꿀꺽 거리는 소리가 아닙니다.

var p = require('./package.json')
p.homepage

최신 정보:

"require"는 읽기 결과를 캐시합니다. 즉, 요구할 수없고 파일에 쓴 다음 다시 요구하고 결과가 업데이트 될 것으로 기대할 수 없습니다.


7
나는 당신의 대답을 보았을 때 이것을 검색하는 것에 대해 분명히 바보처럼 느꼈습니다. 물론이야!
spikeheap 2015 년

1
나를 위해 일했습니다 : P. 그리고 캐싱에 대한 의견을 +1 한 후 나중에 아래에서 지적한대로 'fs.readFileSync ()'를 사용하도록 전환했습니다.
Bart

@spikeheap StackOverflow에 대한 의견을 읽기 전에 크게 웃어 본 적이 있는지 모르겠지만, 당신과 함께 옳았습니다! 건배 감사합니다. ㅋ.
비트 덜

6

이것은 @Mangled Deutz의 좋은 솔루션입니다. 나 자신이 먼저 그것을했지만 작동하지 않았습니다 (곧 다시), 다음 해결책을 시도했습니다.

# Gulpfile.coffee
requireJSON = (file) ->
    fs = require "fs"
    JSON.parse fs.readFileSync file

이제 이것이 작동했지만 약간 장황하다는 것을 알 수 있습니다. require('./package.json')최상의 솔루션입니다.

-파일 이름 앞에 './'를 추가하는 것을 잊지 마십시오. 나는 그것이 간단하다는 것을 알고 있지만, 작동하는 것과 작동하지 않는 것의 차이점입니다.


감사! 이것은 엄청난 도움이되었습니다.
Adam Grant

1
투표 해 주셔서 감사합니다. 마지막으로 댓글이 있습니다. :) 도움이되어 다행입니다.
dewwwald '152015-09-28

0

" npm run build "등을 사용하는 것과 같이 NPM에서 꿀꺽 꿀꺽 마시기를 트리거하는 경우

(이것은 NPM에 의한 gulp 실행 트리거에서만 작동합니다)

process.env.npm_package_ 객체

더 깊은 개체의 경우 밑줄로 구분해야합니다.

package.json에서 만든 구성 객체를 읽고 싶은 것처럼 package.json에서 특정 구성을 읽고 싶다면

scripts : {
   build: gulp 
},
config : {
   isClient: false.
}

그런 다음 사용할 수 있습니다

process.env.npm_package_**config_isClient**
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.