Javascript:在gulpfile.js中获取package.json数据


101

并不是一个专门针对gulp的问题,而是一个人如何从gulpfile.js中的package.json文件中获取信息;例如,我想要获取主页或名称,并将其用于任务中。

Answers:


116

不要require('./package.json')用于监视过程。使用require会将模块解析为第一个请求的结果。因此,如果您正在编辑package.json,那么这些编辑将无法进行,除非您停止监视过程并重新启动它。对于gulp监视过程,最好使用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
当我看到您的答案时,我绝对觉得自己是个白痴。当然!
尖峰堆

1
为我工作:P。对于缓存的注释为+1,我后来切换为使用“ fs.readFileSync()”,如下所示。
巴特2015年

@spikeheap我不知道在阅读关于StackOverflow的评论之前是否曾经大笑过,但是我和你在一起是正确的!谢谢你的欢呼。哈哈。
一点一点的

6

@Mangled Deutz是一个很好的解决方案。我本人首先做到了这一点,但没有成功(再回到第二步),然后我尝试了以下解决方案:

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

现在您应该看到这有点冗长(即使它起作用了)。require('./package.json')是最好的解决方案:

小费

-请记住在文件名前面添加“ ./”。我知道它很简单,但这是require方法起作用与不起作用之间的区别。


谢谢!这极大地帮助了。
亚当·格兰特

1
感谢您的支持,终于有了评论。:)很高兴它对您有所帮助。
dewwwald

0

如果您要从NPM触发吞咽,例如使用“ npm run build ”之

(这仅适用于NPM的gulp运行触发器)

process.env.npm_package_对象

对于较深的对象,应使用下划线将其分开。

如果您想读取package.json中的某些特定配置,例如要读取您在package.json中创建的配置对象,

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

那么你可以使用

process.env.npm_package_**config_isClient**
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.