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

工具利器 Aug 14, 2020

在 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 的区别说明图,将复杂给予简单解释:

常见的 License 说明


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

倾城之链-小程序码

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.