如何快速检查前端项目依赖包的 License

在 Github 没有 License 的内容,是默认会被版权保护。所以如果想要您的项目能让大家放心使用,就需要选择一个合适的 License ,只有这样才能赋予任何人使用,分享和修改这个软件的权力。但有些 License 相对比较严格,当我们在项目中加以使用或修改使用,也需要对项目依赖包的 License,进行检查甚至替换,从而避免不必要的麻烦。本文的主旨即在探讨,如何快速检查前端项目依赖包的 License。大致的方式,即便利项目的模块,以及该模块所有依赖项,将所有 License 信息统一输出于 Excel,然后分析下即可。对于抓取 License 信息,可以使用 license-checker 生成 json,再借助 xlsx,将该 json 输出于 Excel.xlsx即可;具体实现代码如下:

const path = require('path')
const XLSX = require('xlsx')
const { exec } = require('child_process')

const saveWorkbook2xlsx = (dataObjArr, fileName) => {
  const outputPath = path.join(process.cwd(), fileName)
  const workbook = XLSX.utils.book_new()
  const worksheet = XLSX.utils.json_to_sheet(dataObjArr, { skipHeader: true })
  XLSX.utils.book_append_sheet(workbook, worksheet, 'npm package licenses')
  XLSX.writeFile(workbook, outputPath)
}

const generateAndSaveXlsx = () => {
  const licenseObj = require(`${process.cwd()}/npm-licenses.json`)
  const licenseArr = []
  for (key in licenseObj) {
    const item = licenseObj[key]
    licenseArr.push({ name: key, licenses: item.licenses, repository: item.repository })
  }
  saveWorkbook2xlsx(licenseArr, 'npm-package-licenses.xlsx')
}

exec(`npx license-checker --json > ${process.cwd()}/npm-licenses.json`, (error, stdout, stderr) => {
  if (error) {
    console.log(`Something Error: `, error)
    return
  }
  generateAndSaveXlsx()
})

只需要拷贝下来,在对应项目的根目录下,基于 Node.js 运行即可(当然您需要手动安装 xlsx 依赖包)。额外补充说明,如果您想为自己的开源项目选择 license,可以参见 Github 所提供的 Choose an open source license;如果您想对各开源 license 有所了解,可以参见由GNU 操作系统所提供的(https://www.gnu.org/)`各类许可证及其评论。下面是最流行的六种 License 的区别说明图,将复杂给予简单解释:


『有则推荐』: 自 2017 年初,就有开始利用闲余时光,打磨个人最新作品——「倾城之链」 ,有意将其打造成优良开放型平台,旨在云集全球优秀网站,让您更为便捷地探索互联网中那更广阔的世界;在这里,您可以轻松发现学习分享更多有用有趣的事物。目前仍在不断迭代、优化中,如果您对此感兴趣,不妨先尝试一下: 「倾城之链」;亦十分欢迎提出宝贵意见;目前有提供 Web(Pwa)、小程序、快应用等多个版本,以下是倾城之链的小程序码,微信扫之,即可体验 。 Upade@2020-08-13 于深圳.福田。