Gulp解决引入node_modules下的js/css文件路径问题

Gulp解决引入node_modules下的js/css文件路径问题

使用gulp-useref插件

在我们将文件构建到dist目录下后,我们的html会有一些对node_modules下的文件的依赖,例如jquery.js和bootstrap.css,这些文件并没有拷贝到我们的dist目录,这样我们部署上线就会找不到这些文件。

这时候我们就可以借助到gulp-useref插件,这个插件会自动去处理html当中的构建注释,例如:

 <!-- build:css assets/styles/vendor.css -->
  <link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.css">
  <!-- endbuild -->
  
  <!-- build:css assets/styles/main.css -->
  <link rel="stylesheet" href="assets/styles/main.css">
  <!-- endbuild -->

在build和endbuild之间就是一些引入的文件,build后面的是文件类型,例如此处的build:css,后面的路径就是最终打包到后面的路径当中,如果是多个同类型文件,就会一起打包到一个文件中。

除此之外,我们还能在这个过程中对这些文件进行压缩。

安装gulp-useref,yarn add gulp-useref --dev

使用

const { src, dest } = require("gulp")
const loadPlugins = require("gulp-load-plugins")
const plugins = loadPlugins()

const useref = () => {
	return src("dist/*.html", {base: "dist"})
    .pipe(plugins.useref({ searchPath: ['dist', '.'] })) // 使用useref会创建一个文件转换流,这个转换流会去把我们代码中的那些构建注释做一个转换
    // 需要配置searchPath参数,告诉useref去哪个文件下找到这个要被操作的文件
    // 例如main.css文件要去dist目录下找,/node_modules之类的文件就要去项目根目录下找
    // 像这种数组形式的参数我们一般将使用多的放在前面,这样在前面找到了就不会往后执行,性能会有一些优化
    .pipe(dest("release"))
}

对文件进行压缩
yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev
gulp-htmlmin 是用来压缩html的
gulp-uglify 是用来压缩js的
gulp-clean-css 是用来压缩css的
由于文件有不同的类型,所以我们要借助于gulp-if判断文件类型进行操作
yarn add gulp-if --dev

判断文件类型使用对应插件进行压缩

const useref = () => {
  return src("dist/*.html", {base: "dist"})
    .pipe(plugins.useref({ searchPath: ['dist', '.'] }))
    .pipe(plugins.if(/\.js$/,plugins.uglify())) 
    .pipe(plugins.if(/\.css$/,plugins.cleanCss()))
    .pipe(plugins.if(/\.html$/,plugins.htmlmin({
      collapseWhitespace:true, // 清除换行符
      minifyCSS: true, // 压缩css
      minifyJS: true // 压缩js
    })))
    .pipe(dest("release"))
}

转换压缩后的效果
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:node_modules是安装node后用来存放用包管理工具下载安装的包的文件夹。比如webpack、gulp、grunt这些工具。在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块。\[1\]引用\[2\]:在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块,文件内容可能是我们封装好的一些JavaScript方法、jsON数据、编译过的C/C++拓展等。\[2\]引用\[3\]:js在浏览器中运行时没有读写文件的功能,而在Node.js中,可以对服务器文件进行操作读写。通过Node.js可以更改读写文件内容。\[3\] 问题: /\[\\/\]node_modules\[\\/\]/ 是什么意思? 回答: /\[\\/\]node_modules\[\\/\]/ 是一个正则表达式,用于匹配文件路径中的node_modules文件夹。在Node.js中,node_modules文件夹是用来存放通过包管理工具下载安装的包的文件夹。这个正则表达式可以用于查找和处理node_modules文件夹中的文件路径。\[1\] #### 引用[.reference_title] - *1* *2* [node_modules是干什么的?](https://blog.csdn.net/z591102/article/details/107203651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [认识node_modules](https://blog.csdn.net/wang_js_amateyr/article/details/104673784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值