Svelte bundle. js большой, полный комментариев @license, даже в производственном режиме - PullRequest
0 голосов
/ 25 марта 2020

>npm run build в небольшом проекте Svelte создает большой публичный файл / build / bundle. js. Код Javascript сворачивается в серию из одной строки

function(t){return new qr((function(e){...

, но между (или иногда в середине) каждая строка представляет собой большой блок комментариев для лицензий

 * @license
 * Copyright 2018 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 ... 9 more lines
 * limitations under the License.

Дата варьируется, 2017-2019. Есть также несколько лицензий Microsoft. В коде примерно 70 таких лицензий, что приводит к разрастанию до 800 КБ.

Я не перепутал ни с чем, ни с чем другим. Вот пакет. json соответствующие разделы:

"scripts": {
    "build": "rollup -c",
    "dev": "rollup -c -w",
    "start": "sirv public"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "^11.0.0",
    "@rollup/plugin-node-resolve": "^7.0.0",
    "rollup": "^1.20.0",
    "rollup-plugin-livereload": "^1.0.0",
    "rollup-plugin-svelte": "^5.0.3",
    "rollup-plugin-terser": "^5.1.2",
    "svelte": "^3.0.0",
    "svelte-mui": "^0.3.3"
  },

Я пытался удалить node_modules и повторить npm install безрезультатно. Я работаю на Windows 10, если это имеет значение.

1 Ответ

1 голос
/ 30 марта 2020

Официальный шаблон Svelte использует terser для минимизации при запуске в производственном режиме (npm run build).

И, очевидно, по умолчанию terser сохраняет лицензионные комментарии (из их docs ):

--comments [filter]         Preserve copyright comments in the output. By
                            default this works like Google Closure, keeping
                            JSDoc-style comments that contain "@license" or
                            "@preserve". You can optionally pass one of the
                            following arguments to this flag:
                            - "all" to keep all comments
                            - `false` to omit comments in the output
                            - a valid JS RegExp like `/foo/` or `/^!/` to
                            keep only matching comments.
                            Note that currently not *all* comments can be
                            kept when compression is on, because of dead
                            code removal or cascading statements into
                            sequences.

Поскольку пример комментария, который вы разместили, включает тег @license, я твердо верю, что это является причиной.

Вы должны быть в состоянии чтобы удалить эти комментарии (без понятия о законности этого), добавив опцию к плагину terser в вашей конфигурации Rollup:

        production && terser({ output: { comments: false } })
...