Как скопировать из node_modules только файлы, необходимые для распространения, используя grunt и grunt-contrib-copy
Хотя я где-то читал, что "основное" свойство package.json можно использовать для копирования только файлов, необходимых для "dist" или для развертывания. Я предполагал, что для него есть ворчащая задача, но я не вижу ничего, что могло бы помочь мне или проинструктировать меня. Теперь я копирую все под node_modules, но, конечно, мне не нужно распространять пример кода библиотеки.
Есть ли задача grunt или какие-либо инструкции по правильному использованию grunt-contrib-copy, чтобы просто скопировать файлы из зависимостей node_module, надеюсь, из стандартного объекта pkg объекта pkg (проанализированный файл package.json)?
Ответы
Ответ 1
package.json не содержит достаточной информации для вас, чтобы знать, что включать. Вам нужно будет разобрать все операторы require
, но даже тогда есть случаи, которые вы не можете обнаружить, например, загружать ресурсы модуля и т.д.
Правильный способ сделать это - авторы пакетов игнорировать файлы, которые не нужны, с помощью .npmignore
file или даже лучше используйте files
свойство в package.json, чтобы явно определить, какие файлы должны быть включены в пакет.
К сожалению, большинство авторов пакетов ленивы и не беспокоятся об этом...
Я бы посоветовал вам открывать PR в соответствующих модулях с помощью свойства files
.
Ответ 2
Вы можете:
1) Используйте задачу копирования для копирования каждого соответствующего файла в каталог dest:
copy:
js:
files: [
{
expand: true,
cwd: 'node_modules/jquery',
src: 'jquery.min.js',
dest: 'www/js'
},
{
expand: true,
cwd: 'node_modules/jquery-mobile-bower/js',
src: 'jquery.mobile-*.min.js',
dest: 'www/js'
}
]
jquery.min.js и jquery.mobile-x.y.z.min.js будут скопированы в каталог www/js.
2) Используйте concat-задачу для объединения всех файлов в один файл dest (полезно для создания уникальных файлов javascript/stylesheets)
concat:
options:
separator: ';'
js:
dest: 'www/js/lib.js'
src: [
'node_modules/jquery/jquery.min.js',
'node_modules/jquery-mobile-bower/js/jquery.mobile-*.min.js'
]
jquery.min.js и jquery.mobile-x.y.z.min.js будут объединены в один файл www/js/lib.js, разделенный точкой с запятой.