马宇豪
2024-07-16 f591c27b57e2418c9495bc02ae8cfff84d35bc18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const packageEnvs = (vals, prefix, env = {}) => {
  for (const [key, val] of Object.entries(vals)) {
    if (val === undefined) {
      continue
    } else if (val === null || val === false) {
      env[`${prefix}${key}`] = ''
    } else if (Array.isArray(val)) {
      val.forEach((item, index) => {
        packageEnvs({ [`${key}_${index}`]: item }, `${prefix}`, env)
      })
    } else if (typeof val === 'object') {
      packageEnvs(val, `${prefix}${key}_`, env)
    } else {
      env[`${prefix}${key}`] = String(val)
    }
  }
  return env
}
 
// https://github.com/npm/rfcs/pull/183 defines which fields we put into the environment
module.exports = pkg => {
  return packageEnvs({
    name: pkg.name,
    version: pkg.version,
    config: pkg.config,
    engines: pkg.engines,
    bin: pkg.bin,
  }, 'npm_package_')
}