gulp 打包 基础使用

const gulp = require(‘gulp’);
//连接
const connect = require(‘gulp-connect’);
//浏览器同步测试
const bs = require(‘browser-sync’);
//合并 gulp-concat
const concat = require(‘gulp-concat’);
//js压缩
const uglify = require(‘gulp-uglify’);
//css压缩
const cleanCss = require(‘gulp-clean-css’);
//重命名
const rename = require(‘gulp-rename’);
//改变链接
const cheerio = require(‘gulp-cheerio’);
/*
*gulp.task();创建任务

  • gulp.src();源文件
  • gulp.pipe();管道
  • gulp.dest();输入文件的路径
    */
    gulp.task(‘hello’,function (done) {
    console.log(‘hello gulp’);
    done();
    });

//复制1个html文件
gulp.task(‘copyHTML’,function () {
return gulp.src(’./public/login.html’).pipe(gulp.dest(’./dist/public’))
});

//复制所有的HTML文件
gulp.task(‘copyALLHTML’,function () {
return gulp.src(’./public/*.html’).pipe(gulp.dest(’./dist/public’)).pipe(connect.reload())
});

//复制指定文件
//src[文件1,文件2…]
gulp.task(‘copy2js’,function () {
return gulp.src([’./public/js/ajaxFn.js’,’./public/js/toutu.js’])
.pipe(gulp.dest(’./dist/public/js’))
});

//排除某个文件
gulp.task(‘copyAnother’,function () {
return gulp.src([’./public/js/*.js’,’!./public/js/ajaxFn.js’])
.pipe(gulp.dest(’./dist/public/js’))
});

//添加多个后缀名{后缀名1,后缀名2…}
gulp.task(‘copyImage’,function () {
return gulp.src(’./public/image/*.{png,jpg}’)
.pipe(gulp.dest(’./dist/public/image’))
});

//执行多个任务
//写一个任务,这个任务要执行其他的多个任务
//task(任务名,gulp.series(依赖的任务…,回调函数))
//gulp.parallel异步,用于并行(时间),不会阻塞
//gulp.series即是同步,会阻塞,用于串行(顺序)执行
gulp.task(‘build’,gulp.series(‘copyALLHTML’,‘copyAnother’,‘copyImage’,function (done) {
console.log(‘编译完成’);
done();
}));
//watch监视
gulp.task(‘myWatchLogin’,function () {
gulp.watch(’./public/login.html’,gulp.series(‘build’))
});
//删除原来的文件,
gulp.task(‘delFile’,function (done) {
const del = require(‘del’);
//del(),参数,要删除的文件,路径
//[xxx.js,xxx.js] , *.{png,jpg}
//指所有文件
del(['dist/
’]);
done();
});
//编译(相当于重新编译)
//删除dist中的文件
//编译(build)文件
//启动监视
gulp.task(‘reBuild’,gulp.series(‘build’,gulp.parallel(‘myWatchLogin’,function (done) {
console.log(‘重新编译’);
done();
}))
);

// day02

//启动服务
gulp.task(‘server’,function () {
connect.server({
root:‘dist/public’,//服务的根目录
livereload:true //是否实时刷新
})
});
/*
*当修改代码时,如何自动刷新页面

  • 1.修改哪里的代码? src
  • 2.服务访问的是dist 文件中的public
  • 3.当src的代码更新时,同步到dist文件夹,刷新服务
    */

//方法一
//gulp.task(‘autoReload’,gulp.parallel(‘server’,‘reBuild’));
//方法二
gulp.task(‘autoReload’,gulp.parallel(‘server’,function () {
return gulp.watch(’./public/login.html’,gulp(‘copyAllHTML’));
}));

//browser-sync 浏览器同步测试工具
gulp.task(‘browserSync’,gulp.parallel(‘reBuild’,function () {
//init参数
//1.资源文件[],2.服务器对象配置{服务器:{根目录}}
var files = [’./dist//*.html’,’./dist//*.js’];
bs.init(files,{server:{baseDir:’./dist/public’}});
}));

//gulp-concat合并
gulp.task(‘concat’,function () {
return gulp.src(’./public/js/*.js’)
.pipe(concat(‘dyj.js’))
.pipe(gulp.dest(’./dist/public/js’))
});

//gulp-uglify压缩js
gulp.task(‘uglifyJs’,function () {
//把login.js和reg.js合并
//压缩
//输出
return gulp.src([’./public/js/ajaxFn.js’,’./public/js/toutu.js’])
.pipe(concat(‘uglify.js’))
.pipe(uglify({
mangle:false,//修改变量名
compress:false,//是否完全压缩
output:{ //保留注释
comments:‘all’
}
}))
.pipe(gulp.dest(’./dist/public/js’))
});

//css压缩 gulp-clean-css
gulp.task(‘cleanCss’,function () {
return gulp.src(’./public/css/.css’)
.pipe(concat(‘dyj.css’))
.pipe(cleanCss({
/

*自动优化的级别
* 0 - 全手动
* 1 - 只优化单个属性
* 2 - 多个声明及选择器
*/
level:{
2:{
//不想合并选择器
mergeAdjacentRules:false,
mergeIntoShorthands:false,
mergeNonAdjacentRules:false
}
},
//格式设置
format:{
breaks:{
afterProperty:true //属性后换行
}
}
}))
.pipe(gulp.dest(’./dist/public/css’))
});

//重命名 gulp-rename
gulp.task(‘rename’,function () {
return gulp.src(’./public/css/*.css’)
.pipe(concat(‘dyj.css’))
.pipe(gulp.dest(’./dist/public/css’))
.pipe(cleanCss())
.pipe(rename(‘dyj.min.css’))
.pipe(gulp.dest(’./dist/public/css’))
});

//改变链接 gulp-cheerio
gulp.task(‘cheerio’,function () {
return gulp.src(’./public/login.html’)
.pipe(cheerio(function ($) {
( ′ l i n k ′ ) . r e m o v e ( ) ; / / ('link').remove(); // (link).remove();//(‘script’).remove();
$(‘head’).append(’’)
}))
.pipe(gulp.dest(’./dist/public’));
});

当您在使用 Gulp 进行前端项目打包后遇到路由无法正常跳转的问题时,这通常是由以下几个原因引起的: 1. **静态资源路径配置错误**:如果您的应用依赖于相对路径引用文件(如JavaScript、CSS 或图片),而这些路径未随构建过程调整,则可能会导致脚本加载失败或页面元素缺失。 2. **HTML5 History API模式下服务器设置不当**: - 如果您正在使用基于 HTML5 的历史记录API (pushState) 实现单页应用程序(SPA),则需要确保服务器对于所有非API请求都返回入口html文档。 3. **Vue Router / React Router等框架特定问题**: - 对于采用 Vue.js 或者 React 开发的应用程序来说,可能是由于路由规则没有正确地映射到打包后的文件结构上。检查`vue.config.js`(针对Vue CLI项目) 或 webpack 配置中是否对 publicPath 属性进行了正确的设定。 ### 解决方案 #### 修改base标签 可以在 `index.html` 中添加 `<base href="/">` 标签指定基础URL地址;如果是生产环境部署在一个子目录下,则应该相应修改该值为 `/your-8"> <title>My App</title> <!-- 添加 base --> <base href="/"> </head> ``` #### 设置正确的publicPath属性 如果您使用的 Webpack 或其他工具链来构建项目,在其配置文件中找到并适当设置 output.publicPath 参数: ```javascript module.exports = { // 其他配置... output: { path: path.resolve(__dirname, 'dist'), filename: '[name].bundle.js', publicPath: '/' // 生产环境中应根据实际情况调整此路径 } }; ``` 此外还要注意浏览器端的缓存策略可能导致旧版本代码仍然被执行,建议清除缓存或者通过更改服务端Cache-Control响应头避免此类情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值