直接生成LICENSE文件最可靠方式是用VSCode用户代码片段绑定快捷键:创建license.json,定义mit等前缀对应标准协议模板,输入前缀后按Tab展开;需人工核对版权年份、作者及SPDX标识,确保文件名为全大写LICENSE且编码为UTF-8。

直接生成 LICENSE 文件:用 snippets + 命令绑定最可靠
VSCode 本身不内置“一键生成开源协议”的功能,但你可以用 user snippets 配合快捷键,实现输入前缀(如 mit)后按 Tab 就插入完整 MIT 协议文本。这不是“智能生成”,而是确定性模板复用——合规性取决于你填入的模板是否准确、是否匹配项目实际使用场景。
- 打开 VSCode → 左下角齿轮 → “用户代码片段” → 选 “New Global Snippets file” → 命名为
license.json - 填入标准 MIT 模板(注意替换
${1:Copyright (c) $CURRENT_YEAR $2}中的占位符):
{
"MIT License": {
"prefix": "mit",
"body": [
"MIT License",
"",
"Copyright (c) ${1:YYYY} ${2:Author Name}",
"",
"Permission is hereby granted, free of charge, to any person obtaining a copy",
"of this software and associated documentation files (the \"Software\"), to deal",
"in the Software without restriction, including without limitation the rights",
"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
"copies of the Software, and to permit persons to whom the Software is",
"furnished to do so, subject to the following conditions:",
"",
"The above copyright notice and this permission notice shall be included in all",
"copies or substantial portions of the Software.",
"",
"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
"SOFTWARE."
],
"description": "MIT license text"
}
}
保存后,在任意文件中输入 mit → 按 Tab 即可展开。注意:$CURRENT_YEAR 不是 VSCode 原生变量,需手动填年份或用插件扩展(如 vscode-textmate 配合自定义命令),否则留空或写死更稳妥。
为什么不用插件自动填充作者/年份?
多数插件(如 License Generator 或 Insert License)会尝试读取 package.json 的 author 或 Git 配置来填信息,但这类行为不可靠:
- Git 用户名可能不是法律意义上的著作权人(比如公司邮箱 vs 个人名)
-
package.json可能缺失或多人协作时 author 字段为空 - 年份自动填
new Date().getFullYear()容易出错——MIT 协议要求写首次发布年份,不是当前年 - 插件生成的文本未必符合 SPDX 标准格式(例如缺少首行
SPDX-License-Identifier: MIT)
真正合规的做法是:人工核对并填写。快捷键只负责“快速输出标准文本”,不替代法律判断。
不同协议模板怎么管理?
Apache-2.0、GPL-3.0、BSD-3-Clause 等协议结构差异大,不能靠一个 snippet 覆盖。建议分语言/场景建多个 snippet 文件:
- 全局
license.json:放 MIT、Apache-2.0 等通用协议 - 针对 Node.js 项目,新建
javascript.json片段,加入带SPDX注释头的版本(如// SPDX-License-Identifier: MIT) - 针对 Python 项目,在
python.json里加__license__ = "MIT"行,方便被pip show识别
不要把所有协议塞进一个 JSON —— 当前 VSCode 不支持 snippet 内条件分支,硬塞会导致触发混乱或占位符错位。
真正容易被忽略的合规点
生成 LICENSE 文件只是第一步。合规性还取决于三件事:
- 文件名必须是全大写
LICENSE(不是license.txt或LICENSE.md),否则 GitHub 和 npm 不会自动识别 - 如果项目含多个许可证(如部分代码用 GPL,其余用 MIT),必须在根目录放
LICENSE,并在对应子目录单独放LICENSE或用NOTICE文件说明 - VSCode 生成的纯文本默认无 BOM,但某些 Windows 工具(如旧版 Visual Studio)读取时可能乱码 —— 若需兼容,用右下角编码切换为
UTF-8 with BOM保存
快捷键再快,也救不了没读过原文协议的人。每次生成前,花 30 秒重读一遍你选的协议原文,比任何自动化都重要。


















