Распространенный способ справиться с этим - через задачи grunt, которые копируют соответствующие файлы из node_modules в более подходящую папку.
Это отрывок из задачи копирования, который я использовал для недавнего проекта ...
copy: {
types: {
files: [
{
expand: true,
cwd: 'node_modules/@types',
src: ['**/*.ts'],
dest: 'scripts/typings'
}
]
},
jquery: {
files: [
{
expand: true,
cwd: 'node_modules/jquery/dist',
src: ['*.js'],
dest: 'Content/libraries/jquery'
}
]
},
handlebars: {
files: [
{
expand: true,
cwd: 'node_modules/handlebars/dist',
src: ['*.js'],
dest: 'Content/libraries/handlebars'
}
]
},
bootstrap: {
files: [
{
expand: true,
cwd: 'node_modules/bootstrap',
src: ['dist/js/*.js', 'dist/fonts/*.*', 'dist/css/*.css'],
dest: 'Content/libraries/bootstrap'
}
]
}
}
Возможно, есть более краткие способы написать это, но это работает для меня.
Это позволяет мне обновить пакеты моего сайта, выполнив следующие действия ...
$ npm install
$ grunt copy
Папки / Content / библиотеки и / scripts / typings переданы в мое приложение git repo, а node_modules - нет. Это помогает предотвратить проблемы, если модуль станет недоступным на каком-то этапе в будущем. Мой репозиторий Git содержит все необходимое для работы сайта.
Если по какой-либо причине один из этих модулей был удален из npm, это будет означать, что я не смогу выполнить обновления, но мой сайт будет по-прежнему работать с файлами, включенными в мое git-репо.
В моем случае мне вообще не нужны node_modules в моей среде выполнения, так как я не использую nodejs. Я просто использую npm для управления зависимостями клиентского модуля моего приложения.