Svelte bundle.js большой, полный комментариев @license, даже в рабочем режиме

>npm run build в проекте Svelte скромного размера создает большой файл public / 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 КБ.

Я не испортил конфигурацию свертки или что-то в этом роде. Вот соответствующие разделы package.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, если это важно.


person user949300    schedule 25.03.2020    source источник
comment
Удалось вырезать комментарии, а размер файла по-прежнему составляет ~ 700 КБ, поэтому добавленный размер не является большой проблемой, просто странно, что все комментарии к лицензии попадают туда.   -  person user949300    schedule 25.03.2020


Ответы (1)


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

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

--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 } })
person rixo    schedule 29.03.2020
comment
Спасибо! В моей настройке правильная строка в rollup.config.js на самом деле production && terser({ output: { comments: false } }) - person user949300; 30.03.2020
comment
Спасибо, исправляю ответ для будущих посетителей. - person rixo; 30.03.2020
comment
Чистый эффект небольшой, но заметный. Размер файла bundle.js упал с 830 КБ до 785 КБ без комментариев. - person user949300; 30.03.2020