npm/gulp/nodejs
安装npm
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功
npm 升级,命令如下:
$ sudo npm install npm -g
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.14.2 /usr/local/lib/node_modules/npm
如果是 Window 系统使用以下命令即可:
npm install npm -g
使用淘宝镜像的命令:npm install -g cnpm --registry=https://registry.npm.taobao.org
gulp安装
1、是一个JS相关的工具
2、可以直接使用npm安装
3、安装命令 $ npm install --global gulp
gulp的检测
gulp -v
$ gulp --version
显示:CLI version:3.9.1 则表示是 gulp@3
显示:CLI version:2.3.0 则表示是 gulp@4
gulp卸载
$ npm uninstall --global gulp
gulp安装和配置:https://www.cnblogs.com/xiaoleiel/p/11160569.html
gulp的作用是帮我们打包自己的项目。
gulpfile.js必须要有,是gulp进行打包的依据,每个项目需要一个gulpfile.js,在这个文件中进行打包的配置,gulp在运行的时候会自动读取,文件放在根目录和src文件夹同级。
在项目中再次安装gulp,是以第三方模块的形式出现,每个项目都要安装一次gulp。
package.json
devDependencies:表示你的项目开发依赖,比如gulp,开发时用的内容,上线时不需要。
dependencies:表示你的项目依赖,开发和上线时都要用的内容。
gulp第三方包最好放在devDependencies中,npm install --dev 包名,这样就会把依赖记录在devDependencies中。
gulp常用api:
因为gulp是依赖于node环境运行的,将来的运行也是以node为基础运行的,书写gulpfile.js文件就按照node的模块化语法进行书写(CommonJS)。
const gulp = require('gulp');//引入gulp
1、gulp.task(任务名称,任务处理函数),创建一个基于流的任务。
const cssmin = require('gulp-cssmin');//压缩css的gulp插件
//gulp@3的写法
gulp.task('cssHandler',function(){
//找到源文件,进行压缩打包,放入指定目录
return gulp.src('./src/css/*.css').pipe(cssmin()).pipe(gulp.dest('./dist/css/'));
});
task中必须要return,这样别处调用这个任务时可以得到流的结束。
执行一个gulp配置好的任务,直接打开命令行,切换到gulpfile.js所在目录,执行命令 $ gulp 任务名称。
在vscode控制台执行:gulp cssHandler
//gulp@4的写法
const cssHandler = function(){...}
//gulp@4需要导出这个函数
module.exports.cssHandler = cssHandler;
2、gulp.src(路径信息),找到源文件
gulp.src('./a/b.html')找到指定文件
gulp.src('./a/*.html')找到指定文件夹下的所有html文件
gulp.src('./a/**')找到指定目录下的所有文件
gulp.src('./a/**/*')找到a目录下的所有子目录的所有文件
gulp.src('./a/**/*.html')找到a目录下的所有子目录的所有html文件
3、gulp.dest(路径信息),把接受到的内容放入指定的路径内
4、gulp.watch(路径信息,任务名称),监控指定目录下的文件,一旦发生变化,从新执行后面的任务。比如指定目录下的html改变后,重新打包。
5、gulp.series(任务1,任务2,任务3,...),逐个执行任务,前一个任务结束后,执行下一个任务
6、gulp.parallel(任务1,任务2,任务3,...),同时执行多个任务
7、gulp.pipe(),管道函数,所有的gulp的api都是基于流,pipe()就是接收当前流,进入下一个流过程的管道函数
例如:gulp.src(路径信息).pipe(压缩任务).pipe(转码任务).pipe(放到指定目录任务)
gulp常用插件
1、gulp-cssmin,下载:npm i gulp-cssmin --dev,导入:const cssmin = require('gulp-cssmin'),导入后得到一个处理流文件的函数,直接在管道函数中执行。
2、gulp-autoprefixer,下载:npm i gulp-autoprefixer -D,导入:const autoPrefixer = require('gulp-autoprefixer'),在pipe中执行,需要参数。
情况1:gulp.src('./src/css/*.css').pipe(autoPrefixer({browsers:['last 2 versions','FireFox < 20']})).pipe(cssmin()).pipe(gulp.dest('./dist/css/'));
情况2:在package.json中配置:"browserslist":["last 2 versions","FireFox < 20"],这样pipe(autoPrefixer())就不需要加参数了
3、gulp-sass,打包sass文件,下载:npm i gulp-sass --dev,这个很容易报错,是因为gulp-sass需要依赖另一个node-sass包,而node-sass和gulp-sass的下载地址不同。
给node-sass单独配置一个下载地址,先执行:set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ 只有下载node-sass的时候会使用。
然后,npm i node-sass --dev,npm i gulp-sass --dev
打包sass文件的任务,要先安装node-sass和gulp-sass
const sass = require('gulp-sass')
const sassHandler = function(){
return gulp.src('./src/sass/*.scss').pipe(sass()).pipe(autoPrefixer()).pipe(cssmin()).pipe(gulp.dest('./dist/sass/'));
}
4、sass转码的使用,有一种方式叫做导入sass文件,如果需要导入,把变量和混合器定义在 .sass 文件中,gulp配置的只会转码 .scss 文件,变量和混合器不会被转码,
但转码 .scss 文件的时候,会自动读取 .sass 文件里面的变量,解析后再转码。
5、gulp-uglify,下载:npm i gulp-uglify --dev,导入:const uglify = require('gulp-uglify'),js中不能写ES6语法,否则报错。
6、gulp-babel,专门进行ES6转ES5的插件,gulp-babel@7大部分使用在gulp@3里,gulp-babel@8大部分使用在gulp@4里,下载gulp-babel需要依赖另外两个包,
@babel/core和@babel/preset-env,导入的时候只导入一个包就够了,另外两个会自动导入,const babel = require('gulp-babel'),在管道中使用,需要参数。
babel@7参数:babel({presets:['es2015']}),babel@8参数:babel({presets:['@babel/env']})
打包js任务:
const babel = require('gulp-babel')
const uglify= require('gulp-uglify')
const jsHandler = function(){
return gulp.src('./src/js/*.js').pipe(babel({presets:['@babel/env']})).pipe(uglify()).pipe(gulp.dest('./dist/js/'));
}
7、gulp-htmlmin,下载:npm i gulp-htmlmin --dev,导入:const htmlmin = require('gulp-htmlmin'),需要参数,
{
collapseWhitespace:true,//移除空格和换行
removeEmptyAttributes:true,//移除空属性(仅限于原生属性 class="")
collapseBooleanAttributes:true,//移除checked类似的布尔值属性(checked='checked' 改成 checked)
removeAttributeQuotes:true,//移除属性上的双引号
minifyCSS:true,//压缩内嵌式css代码(只能压缩,不能自动添加前缀)
minifyJS:true,//压缩内嵌式js代码(只能压缩,不能转码)
removeStyleLinkTypeAttributes:true,//移除style和link标签上面的type属性
removeScriptTypeAttributes:true,//移除script标签上面的type属性
}
打包html任务:
const htmlmin = require('gulp-htmlmin ')
const htmlHandler = function(){
return gulp.src('./src/pages/*.html').pipe(htmlmin()).pipe(gulp.dest('./dist/pages/'));
}
8、del,npm i del--dev,导入:const del = require('del'),删除文件目录,需要参数,直接执行,不需要流。
const delHandler = function(){return del(['./dist/'])}
创建默认任务,方式1:gulp.task('default',()=>{}),方式2:module.exports.default=()=>{}
module.exports.default=gulp.series(
delHandler,
gulp.parallel(cssHandler,jsHandler,jsHandler,sassHandler)
)
执行gulp default,就会执行打包任务了。也可以直接执行gulp,会默认执行default的。
9、gulp-webserver,启动一个基于node的服务器,下载:npm i gulp-webserver --dev,导入:const webserver = require('gulp-webserver'),需要参数。
const webserverHandler = function(){return gulp.src('./dist').pipe(
webserver({
host:'localhost',//域名(可以配置自定义域名)
port:'8080',//端口号
livereload:true,//当文件修改的时候,是否自动刷新页面
open:'index.html',//默认打开哪一个文件(从dist目录以后的目录开始书写)
proxies:[//配置你所有的代理,每个代理就是一个对象,如果没有代理,不要写空对象
{
//代理标识符
source:'/dt',
//代理目标地址
target:'http://www.xxx.com/blog/list/'
}
]
}))}
再次修改default任务
module.exports.default=gulp.series(
delHandler,//步骤1:删除旧文件
gulp.parallel(cssHandler,jsHandler,jsHandler,sassHandler),//步骤2:并行启动打包任务
webserverHandler//步骤3:启动node服务器
)
webserver自定义域名需要在C:\Windows\System32\drivers\etc\hosts文件中配置,hosts没有后缀名,添加一行配置:127.0.0.1 www.xxx.com
然后就可以把localhost改成配置好的域名了。
10、gulp.watch监控文件修改,并执行任务。
const watchHandler = function(){gulp.watch('./src/sass/*.scss',sassHandler);}//创建监控任务,scss文件修改,自动打包
const watchHandler = function(){gulp.watch('./src/**',gulp.parallel(cssHandler,jsHandler,jsHandler,sassHandler));}//创建监控任务,src下任意文件修改,都重新打包
再次修改default任务
module.exports.default=gulp.series(
delHandler,//步骤1:删除旧文件
gulp.parallel(cssHandler,jsHandler,jsHandler,sassHandler),//步骤2:并行启动打包任务
webserverHandler,//步骤3:启动node服务器
watchHandler,//步骤4:监控文件修改自动打包
)
11、gulp-file-include,在一个html里导入一个html片段,需要参数,下载:npm i gulp-file-include --dev,导入:const fileInclude = require('gulp-file-include')
const htmlHandler = function(){
return gulp.src('./src/pages/*.html').pipe(fileInclude({
//根据配置导入对应的html片段
prefix:'@@',//自定义导入标识符
basepath:'./src/components'//基准目录,组件所在文件夹
})).pipe(htmlmin()).pipe(gulp.dest('./dist/pages/'));
}
然后在html中就可以使用 @@include('./header.html') 来引入组件了,header.html就在components中。
可以传参,参数需要是一个json格式的对象 @@include('./header.html',{title:'xxxxxx'}),然后在header.html中就可以使用 @@title 来获取参数。
npm/gulp/nodejs的更多相关文章
- 谈谈Grunt,NPM,Gulp
随着前端工程化的趋势,产生了越来越多的构建工具,而其中比较优秀的就是grunt,npm,gulp,今天我来说说这三者间的区别以及他们的优缺点. 相信一般前端开发者选择构建工具的时候,更多的是看个人习惯 ...
- Windows 下Npm和NodeJS升级
前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作. 1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -vv4.4.3 C:\U ...
- nvm、npm、nodejs的关系(转载)
nvm.npm.nodejs的关系 为什么要了解nvm.npm.nodejs的关系: reactNative的项目构建都是有这几个工具进行构建管理. 掌握他们的关系,就能了解reactNative项目 ...
- nodejs & npm & gulp 安装和配置
熟悉 Hellolily的过程中,了解了这个. 环境: ubuntu 14.04 LTS 64bit 源码安装方式: 下载最新源码:如果被和谐请自行想办法. 解压并编译安装: cd node-xxx ...
- windows平台下node,npm,gulp配置
参考文献:http://blog.csdn.net/yuanyuan214365/article/details/53749583 1.安装nodejs:nodejs nodejs安装路径随意 nod ...
- ubuntu 安装 npm、nodejs 各种问题
nodejs let notifier = require('update-notifier')({pkg}) 报错 先卸载nodejs,然后安装稳定最新版 # apt-get remove node ...
- 了解 yarn 、npm、nodejs
一.前言 针对即将上线的 jeecg-boot 做一些准备. 二.了解系列 1.了解 nodejs Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrom ...
- npm cnpm +nodejs
nodejs win+r 打开cmd.命令:1.node -v (查看版本信息)2.npm -v (查看版本信息)3.npm install -g cnpm –registry=https:/ ...
- Windows下更新 npm 和 nodejs
一.更新npm // 将npm更新到最新版本 npm install npm@latest -g 二.更新nodejs 1. 首先通过 where node 命令找到nodejs的安装路径 2. 然后 ...
随机推荐
- python 面向对象的内置方法
要求:了解即可,能用最好 """ 1.print(obj), str(obj), %s % (obj), 都调用obj.__str__()方法,若类中没有找__repr_ ...
- 关于SpringDataJpa中测试出现StackOverflowError错误问题
在使用SpringDataJpa进行多表查询时,使用导航查询,每次都出现 StackOverflowError错误, 经过查找资料,网上百度,终于找到原因, StackOverflowError 是栈 ...
- 2019杭电多校赛第九场 Rikka with Mista
Problem Description Rikka is a fervent fan of JoJo's Bizarre Adventure. As the last episode of Golde ...
- 工具之wc
wc命令的功能为统计指定文件中的字节数.字数.行数, 并将统计结果显示输出. 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同 ...
- linux--->阿里云centos6.9安装yii2报错
阿里云centos6.9安装yii2报错 错误显示:Warning: require(/vendor/autoload.php): failed to open stream: No such fil ...
- learn more ,study less(三):超越整体性学习
高效率的学生 成为一名高效率学生或是自学者需 要掌握减少花在书本上时间的艺术,我上学时,除了全日制的上课学习,业余时间经营一家 企业,每周写大约 7000 字,健身以及主持一家演讲俱乐部,尽管如此,我 ...
- springIOC源码接口分析(四):MessageSource
一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...
- 终于知道为什么linux文件系统权限是124了
哈哈,恍然大悟,出自pythonweb开发实战这一本书135页,有兴趣的朋友可以去了解下!
- Distance dependent Chinese Restaurant Processes
Here is a note of Distance dependent Chinese Restaurant Processes 文章链接http://pan.baidu.com/s/1dEk7ZA ...
- .net core3.1 web api中使用newtonsoft替换掉默认的json序列化组件
在微软的文档中,有着较为详细的替换教程 https://docs.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=as ...