Django项目引入NPM和gulp管理前端资源

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

前言

之前写了一篇《Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件》,现在又来用Django开发项目了,之前我搞了一个Django的快速开发脚手架「DjangoStarter」,正好给升级一下~

关于npm和gulp我就不多重复了,之前那篇文章都写了,直接上操作

安装依赖

安装依赖的操作跟上一篇文章是一样的,不过我这里直接提供package.json文件,复制到项目根目录里面,然后直接执行命令安装依赖。

package.json文件如下:

{"name": "django\_starter","version": "1.0.0","description": "","main": "index.js","repository": "https://github.com/Deali-Axy/DjangoStarter","author": "DealiAxy","license": "Apache License 2.0","dependencies": {"bootstrap": "^5.1.3",},"devDependencies": {"gulp": "^4.0.2","gulp-changed": "^4.0.3","gulp-clean-css": "^4.3.0","gulp-concat": "^2.6.1","gulp-rename": "^2.0.0","gulp-uglify": "^3.0.2","rimraf": "^3.0.2"}
}

执行命令:

npm install
# 或者有安装yarn的话可以
yarn

gulp配置

在项目根目录下创建gulpfile.js文件

直接上配置文件:

/// 
"use strict";//加载使用到的 gulp 插件
const gulp = require("gulp"),rimraf = require("rimraf"),concat = require("gulp-concat"),cssmin = require("gulp-clean-css"),rename = require("gulp-rename"),uglify = require("gulp-uglify"),changed = require("gulp-changed");//定义 static 下的各文件存放路径
const paths = {root: "./static/",css: './static/css/',js: './static/js/',lib: './static/lib/'
};//css
paths.cssDist = paths.css + "**/*.css";//匹配所有 css 的文件所在路径
paths.minCssDist = paths.css + "**/*.min.css";//匹配所有 css 对应压缩后的文件所在路径
paths.concatCssDist = paths.css + "app.min.css";//将所有的 css 压缩到一个 css 文件后的路径//js
paths.jsDist = paths.js + "**/*.js";//匹配所有 js 的文件所在路径
paths.minJsDist = paths.js + "**/*.min.js";//匹配所有 js 对应压缩后的文件所在路径
paths.concatJsDist = paths.js + "app.min.js";//将所有的 js 压缩到一个 js 文件后的路径//使用 npm 下载的前端组件包
const libs = [{name: "bootstrap", dist: "./node\_modules/bootstrap/dist/**/*.*"},
];// 使用 npm 下载的前端组件,自定义存放位置
const customLibs = [// {name: 'font-awesome', dist: './node\_modules/@fortawesome/fontawesome-free/**/*.*'},
]//清除压缩后的文件
gulp.task("clean:css", done => rimraf(paths.minCssDist, done));
gulp.task("clean:js", done => rimraf(paths.minJsDist, done));gulp.task("clean", gulp.series(["clean:js", "clean:css"]));//移动 npm 下载的前端组件包到 wwwroot 路径下
gulp.task("move:dist", done => {libs.forEach(item => {gulp.src(item.dist).pipe(gulp.dest(paths.lib + item.name + "/dist"));});done()
})
gulp.task("move:custom", done => {customLibs.forEach(item => {gulp.src(item.dist).pipe(gulp.dest(paths.lib + item.name))})done()
})//每一个 css 文件压缩到对应的 min.css
gulp.task("min:css", () => {return gulp.src([paths.cssDist, "!" + paths.minCssDist], {base: "."}).pipe(rename({suffix: '.min'})).pipe(changed('.')).pipe(cssmin()).pipe(gulp.dest('.'));
});//将所有的 css 文件合并打包压缩到 app.min.css 中
gulp.task("concat:css", () => {return gulp.src([paths.cssDist, "!" + paths.minCssDist], {base: "."}).pipe(concat(paths.concatCssDist)).pipe(changed('.')).pipe(cssmin()).pipe(gulp.dest("."));
});//每一个 js 文件压缩到对应的 min.js
gulp.task("min:js", () => {return gulp.src([paths.jsDist, "!" + paths.minJsDist], {base: "."}).pipe(rename({suffix: '.min'})).pipe(changed('.')).pipe(uglify()).pipe(gulp.dest('.'));
});//将所有的 js 文件合并打包压缩到 app.min.js 中
gulp.task("concat:js", () => {return gulp.src([paths.jsDist, "!" + paths.minJsDist], {base: "."}).pipe(concat(paths.concatJsDist)).pipe(changed('.')).pipe(uglify()).pipe(gulp.dest("."));
});gulp.task('move', gulp.series(['move:dist', 'move:custom']))
gulp.task("min", gulp.series(["min:js", "min:css"]))
gulp.task("concat", gulp.series(["concat:js", "concat:css"]))//监听文件变化后自动执行
gulp.task("auto", () => {gulp.watch(paths.css, gulp.series(["min:css", "concat:css"]));gulp.watch(paths.js, gulp.series(["min:js", "concat:js"]));
});

无脑复制粘贴就行,真正使用的时候,只需要关注这两段代码

//使用 npm 下载的前端组件包
const libs = [{name: "bootstrap", dist: "./node\_modules/bootstrap/dist/**/*.*"},
];// 使用 npm 下载的前端组件,自定义存放位置
const customLibs = [// {name: 'font-awesome', dist: './node\_modules/@fortawesome/fontawesome-free/**/*.*'},
]

第一段是针对比较规范的npm包,资源文件都在dist目录下的,配置规则就比较简单,原样复制到我们项目的/static/lib目录下就行。(一般比较新的npm包都是这种结构)

第二段是针对不按规范的npm包,按照习惯,我们把它包下的css和js文件分开放到/static/lib目录下,当然具体怎么放可以自己决定,这些规则配置很自由的。

举个例子:

const customLibs = [{name: 'example-lib/css', dist: './node\_modules/example-lib/a/b/*.css'},{name: 'example-lib/js', dist: './node\_modules/example-lib/a/c/*.js'},
]

这样就可以把example-lib包里面,a/b目录下的css文件,和a/c目录下的js文件,分别复制到我们项目目录的/static/lib/example-lib/css/static/lib/example-lib/js目录,到时我们项目中引用会比较方便。

执行gulp任务

配置完了之后,直接执行这个命令就行:

gulp move

之前的gulp配置里还配了很多其他任务,不过感觉必要性不大,毕竟我们这是后端项目,只用一个move命令就行了

关于其他的命令可以看上一篇有具体讲到。

在项目中引用

这部分其实不在本文范畴,不过既然提到就写一下吧。

在模板文件中,首先加载static标签,在模板代码的开头写上:

{% load static %}

然后需要引用静态文件的地方:

因为我们之前配置gulp的时候,把所有npm包都复制到了/static/lib目录下,所以引用的时候是lib/开头。

  • 前言

  • 安装依赖

  • gulp配置

  • 执行gulp任务

  • 在项目中引用

    __EOF__

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foHbMHil-1648961275490)(https://blog.csdn.net/deali)]程序设计实验室 - 本文链接: https://blog.csdn.net/deali/p/16094743.html

  • 关于博主: 来自全干工程师的互联网热门新技术探索与团队敏捷开发实践探讨,欢迎一起交流技术,分享学习实践经验~
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)😉】**一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有声听书

各位领导/投资人/用户/合作伙伴: 我们的产品《有声听书》是为了解决中年人,中老年人的痛苦。他们需要丰富生活,但是现有的方案并没有很好地解决这些需求,我们有独特的办法,有戏剧,书的音频能给用户带来好处…

OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测

在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处。 在这里,我们使用Lap…

设计模式之:享元模式FlyweightPattern的实现

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 享元模式的理解: 享元模式的定义:运用共享技术支持大量细粒度对象的复用; Flyweight P…

安全公司笔试面试题总结

一IP地址(注意地址范围和私有地址的定义) IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。…

团队作业3——需求改进系统设计

Deadline: 2017-4-21 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目包括后文的四个方面 需求&原型改进系统设计Alpha任务分配计划测试计划晚交 - 0分迟交两周以上 - 倒扣本次作业分数抄袭 - 倒扣本次作业分数需求&…

sed基本用法

sed可以替换给定文本中的字符串,通过正则表达式来实现。 例如 sed s/pattern/replace_string/ file 1、后缀/g意味着sed会替换每一处匹配。但是有时候并不需要替换前N处。有一个选项可以忽略前N处匹配,并从N1处开始匹配。 echo this thisthisthis | s…

Ubuntu安装开发者平台Backstage

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 Ubuntu安装开发者平台Backstage 什么是Backstage? Backstage是一个构建开发者门户的开源平台。通过支持一个集中的软件分…

7.中文输入验证-原生JS

1 <!DOCTYPE html>2 <html>3 <head lang"en">4 <meta charset"UTF-8">5 <title>中文输入验证-原生JS</title>6 </head>7 <body>8 <input type"text" id"num" οnblur&quo…

(转)CentOs 设置静态IP 方法

在做项目时由于公司局域网采用自动获取&#xff29;&#xff30;的方式&#xff0c;导到每次服务器重启主机&#xff29;&#xff30;都会变化。为了解决这个问题&#xff0c;我参考了http://blog.sina.com.cn/s/blog_537977e50100qhb5.html的文章然后根据自己的情况设置静态IP…

php资源索引

2019独角兽企业重金招聘Python工程师标准>>> w3school http://www.w3school.com.cn/php/func_mysql_result.asp osc代码分享 http://www.oschina.net/code/list/?langphp&catalog&showtime&sort&p110 CRUD例子&#xff1a; http://git.oschina…

掌握JavaScript中的迭代器和生成器,顺便了解一下async、await的原理

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 掌握JavaScript中的迭代器和生成器&#xff0c;顺便了解一下async、await的原理 前言 相信很多人对迭代器和生成器都不陌…

Boot loader: Grub入门(转)

Boot Loader: Grub 在看完了前面的整个启动流程&#xff0c;以及核心模块的整理之后&#xff0c;你应该会发现到一件事情&#xff0c; 那就是『 boot loader 是加载核心的重要工具』啊&#xff01;没有 boot loader 的话&#xff0c;那么 kernel 根本就没有办法被系统加载的呢&…

网页设计趋势:模糊背景在网站中的经典应用案例

如今&#xff0c;网页设计领域出现了多种创新的设计方法&#xff0c;例如视差滚动&#xff0c;全屏背景&#xff0c;单页设计等等。今天这篇文章向大家介绍另一种新的网页设计趋势——模糊背景。这种类似于摄影拍摄的效果应用在网页中能够突出主题内容&#xff0c;同时若隐若现…

magento去除子分类的url地址中带有父分类的url key

2019独角兽企业重金招聘Python工程师标准>>> app/code/core/Mage/Catalog/Model/Url.php 找到如下代码 方法getCategoryRequestPath if (null $parentPath) {$parentPath $this->getResource()->getCategoryParentPath($category);}elseif ($parentPath /…

深度学习(三)之LSTM写诗

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 数据预处理 构建数据集模型结构生成诗 根据上文生成诗生成藏头诗 参考 根据前文生成诗&#xff1a; 机器学习业&…

Some Principles

立刻做 1、2分钟原则 凡是2分钟内就可以完成的事&#xff0c;立刻去做不要犹豫。人的大脑擅长分析处理&#xff0c;不擅长记忆。  应用举例&#xff1a;  a、加微信加QQ顺手添加备注名&#xff0c;或许下次联系已经是三个月后了。  b、吃完饭立刻洗碗&#xff0c;分分钟的…

Jenkins 脚本命令行应用总结

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 Jenkins脚本命令行应用总结 测试环境 Jenkins 2.304 脚本命令行入口 Jenkins主页→系统管理→脚本命令行 遍历项目 例…

shell 产生随机数的多种方法

总结&#xff1a;1、echo $RANDOM2、 openssl rand -base64 103、date %s%N 或 date %s%N |md5sum4、cat /proc/sys/kernel/random/uuid 5、使用yum安装expect 使用命令&#xff1a; mkpasswd -l 10#-l为长度后续再补充。转载于:https://blog.51cto.com/linuxboys/1587500

C# 将PDF转为Excel

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 通常&#xff0c;PDF格式的文档能支持的编辑功能不如office文档多&#xff0c;针对PDF文档里面有表格数据的&#xff0c;如果…

SQL Server R2 地图报表制作(五)

SQL Server R2 地图报表制作&#xff08;五&#xff09; 2.3 向地图中添加线条层 在上述报表的基础上&#xff0c;我们接下来添加一个表示两个商店间路线的地图层&#xff0c;这里我们依旧使用SQL空间数据源&#xff0c;部分步骤与上一节类似&#xff0c;所不同的是相应的SQL语…