为了避免在静态文件夹中导入许多未使用的文件,我使用Gulp 脚本复制了我需要的项目。我在安装包后使用NPM script 调用 Gulp,所以它不会影响我的日常工作流程。
package.json:
{
"dependencies": {
"bootstrap": "^4.3.1",
"gulp": "^4.0.2",
"jquery": "^3.4.1"
},
"scripts": {
"install": "gulp"
}
}
gulpfile.js
const { series, src, dest } = require('gulp');
// Task 1: copy bootstap's assets to /_vendor/
function bootstrap() {
const files = [
'node_modules/bootstrap/dist/css/bootstrap.min.css',
'node_modules/bootstrap/dist/js/bootstrap.min.js'
]
return src(files).pipe(dest('_vendor'))
}
// Task 2: copy jquery's assets to /_vendor/
function jquery() {
const files = [
'node_modules/jquery/dist/jquery.min.js'
]
return src(files).pipe(dest('_vendor'))
}
exports.default = series(bootstrap, jquery)
my_project/settings.py:
STATICFILES_DIRS = [
str(BASE_DIR / '_vendor'), # populated by gulp
]
Django 模板:
{% load staticfiles %}
<link rel="stylesheet" href="{% static 'bootstrap.min.css' %}" />
奖金?
在 Gulpfile 中,您可以连接和缩小文件。例如,这是我用于 Blueimp 文件上传库的 Gulpfile:
const uglify = require('gulp-uglify');
const concat = require('gulp-concat');
// Task 3: minify blueimp's assets and save to /_vendor/
function blueimp() {
const files = [
'node_modules/blueimp-file-upload/js/vendor/jquery.ui.widget.js',
'node_modules/blueimp-file-upload/js/jquery.iframe-transport.js',
'node_modules/blueimp-file-upload/js/jquery.fileupload.js'
]
return src(files).pipe(uglify())
.pipe(concat('jquery.fileupload.min.js'))
.pipe(dest('_vendor/'))
}