typescript - Como lidar com aviso de copyright em um bundle JavaScript?
Eu estava escrevendo alguns pequenos demos para explicar decorators (em TypeScript) para colegas quando percebi que meu bundle tinha um aviso de Copyright da Microsoft que meio que tornava todo o meu arquivo livre para todos (e feito pela MS).
Como isso deve ser tratado efetivamente (se eu criar algo que não seja gratuito)?
Usei Typescript 3.1 para compilar e rollup para empacotamento.
código :
import { isNotUndefined, isNotNullOrUndefined } from "goodcore/Test";
function deprecated<S>(instead?: string, message?: string) {
// Logic removed for brevity...
}
class Car {
@deprecated()
public turnIgnitionKey() {
this.start();
}
public pressStartButton() {
this.start();
}
private start() {
console.log("Running!");
}
}
let car = new Car();
car.turnIgnitionKey();
car.pressStartButton();
e início do pacote (onde a última função é minha e as anteriores são da MS):
'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function isNullOrUndefined(arg) {
return arg === undefined || arg === null;
}
Resposta #1
Eu adicionei o rollup-plugin-terser na minha configuração do rollup e defini comments como false para que todos os comentários sejam removidos.
...
import { terser } from 'rollup-plugin-terser';
...
plugins: [
...
terser({ format: { comments: false } }),
...
]
Resposta #2
O Rollup reúne tudo o que é necessário em arquivos de saída. O que você vê aí são auxiliares do Typescript do módulo tslib.
Você pode substituir esse código (e se livrar da licença da MS) com importações da biblioteca tslib.
Adicione ao seu rollup.config.js a seguinte configuração: external: ["tslib"]. Infelizmente, você precisa adicionar o módulo tslib às suas dependências (ou peerDependencies) no seu projeto.
verifique as conversas seguintes para mais detalhes: https://github.com/ezolenko/rollup-plugin-typescript2/issues/58 (sobre a configuração externa)
https://github.com/ReactiveX/rxjs/issues/2436#issuecomment-371585945 (sobre problemas com dependência vs peerDependency)
e aqui sobre helpers: https://mariusschulz.com/blog/external-helpers-library-in-typescript
