npm 、webpack、gulp

package.json 有什么作用?

每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。

可通过

npm init 

来创建

{
  "name": "someone",                                               //项目名称
  "version": "1.0.0",                                              //版本号
  "description": "",                                               //描述
  "main": "index.js",                                              //加载的入口文件
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"          //运行脚本命令的npm命令行缩写,通过npm test 执行
  },
  
  "dependencies": {                                                //项目运行所依赖的模块
    "express": "latest",
    "MD5": "~1.2.0"
  },
  
  "devDependencies": {                                             //项目开发所需要的模块。
    "bower": "~1.2.8",
    "grunt": "~0.4.1",
    "browserify": "2.36.1",
    "grunt-browserify": "~1.3.0",
  },
    
  "author": "",                                                    //作者名 
  "license": "ISC"                                                 //许可证
}


有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。


npm install --save app 与 npm install --save-dev app有什么区别?

  • --save参数自动把模块和版本号添加到dependencies部分写入dependencies属性,--save-dev表示自动把模块和版本号添加到devdependencies属性。
  • 前者是项目运行所依赖的模块,后者是项目开发所需要的模块。
  • 正常使用npm install时,会下载dependencies和devDependencies中的模块,当使用npm install--production或者注明NODE_ENV变量值为production时,只会下载dependencies中的模块。

node_modules的查找路径是怎样的?

当前目录、上级目录,一层层往上查找。。。。最终到根目录


npm3与 npm2相比有什么改进?yarn和 npm 相比有什么优势?

npm2 安装依赖的时候比较简单直接,直接按照包依赖的树形结构下载填充本地目录结构。太深的目录树结构会严重影响效率,甚至在 Windows 下可能会超出系统路径限制的长度。另外,在 Windows 有删 node_modules 目录经历的可能都经历过漫长的等待。

npm3 安装时会按照 package.json 里依赖的顺序依次解析,遇到新的包就把它放在第一级目录,后面如果遇到一级目录已经存在的包,会先判断版本,如果版本一样则忽略,否则会按照 npm2 的方式依次挂在依赖包目录下。这种构建方式会几乎把所有包放在一级目录下,很大程度上提升了效率以及节省了部分磁盘空间。

image

yarn和npm的比较:

  1. 无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 成功安装之后,才能继续后面的安装。而 Yarn 是同步执行所有任务,提高了性能。
  1. npm 的输出信息比较冗长。在执行 npm install <package> 的时候,命令行里会不断地打印出所有被安装上的依赖。相比之下,Yarn 简洁太多:默认情况下,结合了 emoji (Windows 上 emoji 不可见)直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息。

  2. npm 和 Yarn 都是通过 package.json 记录项目需要拉取的依赖模块,不过在使用时,往往 package.json 中模块的版本号不太会写得非常确切,通常是定个版本范围。为了防止拉取到不同的版本,Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。而 npm 要通过 shrinkwrap 命令生成 npm-shrinkwrap.json 文件,只有当这个文件存在的时候,packages 版本信息才会被记录和更新。

yarn 构建步骤如下:

  1. Resolution: 向仓库请求依赖关系
  2. Fetching: 看看本地缓存了没有,否则把包拉到缓存里
  3. Linking: 直接全部从缓存里构建好目录树放到 node_modules 里

webpack是什么?和其他同类型工具比有什么优势?

webpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成少量的 bundle - 通常只有一个,由浏览器加载。

  1. webpack 支持简单的不含变量的表达式
  2. webpack 提供了代码拆分的方案,可以将应用代码拆分为多个块(chunk),每个块包含一个或多个模块,块可以按需被异步加载。
  3. webpack 提供了模块热替换的能力,它使得在修改完某一模块后无须刷新页面,即可动态将受影响的模块替换为新的模块,在后续的执行中使用新的模块逻辑。

npm script是什么?如何使用?

npm 允许在package.json文件里面,使用scripts字段定义脚本命令。

scripts字段是一个对象。它的每一个属性,对应一段脚本。

{
  "name": "someone",                                               //项目名称
  "version": "1.0.0",                                              //版本号
  "description": "",                                               //描述
  "main": "index.js",                                              //加载的入口文件
   
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",          //运行脚本命令的npm命令行缩写,通过npm test 执行no test specified
    “bulid” "mkdir some"                                           //自定义命令需要通过npm run bulid来执行,创建some文件夹                                                                
  },
 
}


npm scripts 使用指南


gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并

gulp是基于Nodejs的自动任务运行器, 它能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

gulpfile.js

var gulp = require('gulp')                         //导入gulp
var cssnano = require('gulp-cssnano')              //导入css压缩包             
var concat = require('gulp-concat')                //导入文件合并包
var jsmin = require('gulp-uglify')                 //导入JS压缩包
var imgmin = require('gulp-imagemin')              //导入图片压缩包

gulp.task('build:img',function(){                  //图片压缩任务
    gulp.src('./scr/img/*.jpg')
        .pipe(imgmin())
        .pipe(gulp.dest('./dist/img/'))
})


gulp.task('build:css',function(){                  //css合并压缩任务
    gulp.src('./scr/css/*.css')
        .pipe(concat('all.css'))
        .pipe(cssnano())
        .pipe(gulp.dest('./dist/css/'))
})

gulp.task('build:js',function(){                   //js合并压缩任务
    gulp.src('./scr/js/*.js')
        .pipe(concat('all.js')) 
        .pipe(jsmin())
        .pipe(gulp.dest('./dist/js/'))
})



gulp.task('default',['build:img','build:css','build:js'])




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,283评论 6 530
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,947评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,094评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,485评论 1 308
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,268评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,817评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,906评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,039评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,551评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,502评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,662评论 1 366
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,188评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,907评论 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,304评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,563评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,255评论 3 389
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,637评论 2 370

推荐阅读更多精彩内容