17

Javascript 缩小通常会从源代码中删除所有评论。这意味着许可证信息也被删除。

如果我经营一个大网站,并且我想遵守许可证,这是否意味着我不能使用自动缩小?没有“保留第一条评论,但不保留其他评论”的选项,对吗?

我问是因为一家相当大的公司使用了我编写的一些代码,但没有包括我的 (MIT) 许可证,但在我被激怒之前,我想设身处地为他们着想。

编辑
作为作者,我似乎有责任以这样的方式评论许可证(见答案),它不会在缩小过程中被删除。我可以先这样做,然后如果我的许可证仍然被删除,那就发臭

4

8 回答 8

11

这是“视情况而定”的经典案例。

这取决于缩小器。例如,UglifyJS 将保留在文件的初始注释块中,除非您明确告诉它不要使用-nc标志。其他人(如 Google 的 Closure Compiler)寻找特殊的注释(例如,@license@preserve)。有些人尊重“响亮”的评论(例如,/*! ... */),而其他人则不尊重。

这取决于你如何缩小。一些组织正在积极地缩小和连接所有内容以挤出每个字节。其他人则在源代码控制中添加许可证,并在缩小过程中“将其保留”。其他人在将所有内容连接在一起应用许可证文件。

有些地方很容易在他们的生产版本中放弃许可证,特别是如果他们积极地将他们使用的每个库连接到一个 JS 文件中。他们甚至可能不知道他们正在这样做。您在这里最好的选择可能只是联系并要求他们确保他们尊重许可条款并将许可文本留在那里 - 他们甚至可能没有意识到他们正在这样做。

于 2013-07-04T12:01:52.940 回答
7

不!如果您在 YUIcompressor 中使用了以下注释样式:

/*!
 *
 */

感叹号告诉压缩器保留评论。

这是这些评论的记录注释

于 2013-07-04T11:55:05.940 回答
6

Google Closure Compiler 支持@preserve@license注释告诉它保留评论:

/**
 * @preserve Copyright 2009 SomeThirdParty.
 * Here is the full license text and copyright
 * notice for this file. Note that the notice can span several
 * lines and is only terminated by the closing star and slash:
 */

UglifyJS支持一个命令行选项,--comments接受一个正则表达式。任何与正则表达式匹配的注释都将保留在输出中。

其他答案表明其他缩小器也支持此功能。您必须阅读所选压缩程序的文档,以确定在您自己的情况下使用的确切语法/技术。

于 2013-07-04T11:55:54.860 回答
1

您可以使用节点的r.js

这里描述了如何使用它

样本输出

或者wro4j也保留许可证注释。

于 2013-07-04T11:57:04.823 回答
1

可以保留许可证信息。例如,YUI 压缩器可以做到:

以 /*! 开头的 C 风格注释 被保留。这对于包含版权/许可信息的评论很有用。

文档

于 2013-07-04T11:57:42.597 回答
0

这取决于您的缩小工具

/** Notice 
  *
  *
**/

或者

/*!
 *
 *
 */

查看您的工具文档

于 2013-07-04T11:59:36.683 回答
0

这取决于使用的压缩工具/API。如果工具支持,重要的注释可以留在压缩器输出中。以下是重要评论的格式

/*!
 * Your comment...1
 * ......
 * Your comment...n
 */

以下可用于缩小 javascript 代码的简单在线工具,我发现它保留了重要的注释

http://utilninja.com/Computing/JavascriptMinifier

于 2017-11-28T06:37:18.670 回答
0

几年后,但...

除了消除死代码的缩小器之外,您可以将对许可证的引用编码为不是带有命名空间前缀的注释的内容。

对于 JS 类似的东西;

var NS_LICENSE_URL = "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt";

对于 CSS 类似的东西;

.ns_license_url {
  content: "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt";
}

或者,您可以复制整个许可证。也可以为 JS 添加一个 console.out 以将其打印到控制台,但这可能会越界。

于 2018-01-25T15:39:05.570 回答