九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
基于npm scripts的前端構(gòu)建工具

在前端開發(fā)工作中,為了避免重復(fù)的工作,我們通常會(huì)借助一些任務(wù)運(yùn)行器去完成常見的前端任務(wù),例如文件合并,腳本壓縮,生成sprite圖。世面上有很多這樣的工具,比較成熟的有 gruntgulp , webpack , shellant 。使用這些工具可以大大的提高我們的日常產(chǎn)出,讓我們把開發(fā)的重心放在項(xiàng)目本身的業(yè)務(wù)上,而不必在常見任務(wù)上浪費(fèi)過多的時(shí)間。我們不去討論這些工具之間的優(yōu)勢(shì)和差異,一千個(gè)讀者就有一千個(gè)哈姆雷特。在工作中,我使用過的前端任務(wù)工具包括但不限于 grunt , gulp ,他們的確給我?guī)砹撕芏嗟膸椭?,?dāng)我發(fā)現(xiàn) npm scripts 命令就能很好的完成這些任務(wù)時(shí),我不得不跟他們告別。相較于 gruntgulp , npm scripts 具有更大的優(yōu)勢(shì),使用 npm scripts 執(zhí)行構(gòu)建自動(dòng)化是一種更簡(jiǎn)單的方式。

問題

  • 對(duì)插件作者的依賴
  • 令人沮喪的調(diào)試
  • 過時(shí)的文檔

為何會(huì)忽略掉 npm scripts

  • 認(rèn)為 npm scripts 需要強(qiáng)大的命令行技巧
  • 認(rèn)為 npm scripts 不夠強(qiáng)大
  • 認(rèn)為 Gulp 的流對(duì)于快速構(gòu)建來說是不可或缺的
  • 認(rèn)為 npm scripts 無法實(shí)現(xiàn)跨平臺(tái)運(yùn)行

npm scripts

npm 會(huì)在項(xiàng)目的 package.json 文件中尋找 scripts 區(qū)域,其中包括 npm testnpm start 等命令。事實(shí)上, npm testnpm startnpm run testnpm run start 的簡(jiǎn)寫,你可以使用 npm run 來運(yùn)行 scripts 里的任何條目。

使用 npm run 的方便之處在于, npm 會(huì)自動(dòng)把 node_modules/.bin 加入 $PATH ,當(dāng)腳本內(nèi)容結(jié)束,則子shell關(guān)閉,回到父shell中,這樣你可以直接運(yùn)行依賴和開發(fā)依賴程序,不需要全局安裝了,只要 npm 上的包提供命令行接口,你就可以直接使用它們。

常見任務(wù)

package.json 模板

{  'name': 'npm-scripts-boilerplate',  'version': '1.0.0',  'scripts': {    ...  },  'devDependencies': {    ...  }}

我們的構(gòu)建腳本命令放在 scripts 對(duì)象里,對(duì)于想使用的工具依賴庫(kù)都放在 devDependencies 對(duì)象里。

項(xiàng)目結(jié)構(gòu)

├── CHANGELOG.md├── README.md├── build│  ├── images│  │  └── sprites.png│  └── js│      ├── bundle.js│      └── bundle.min.js├── docs├── package.json├── src│  ├── config.rb│  ├── css│  │  ├── main.css│  │  ├── main.css.map│  │  └── spirtes.css│  ├── images│  │  ├── icons│  │  └── sprites.png│  ├── index.html│  ├── js│  │  └── app.js│  ├── media│  └── sass│      ├── _landscape.scss│      ├── _mediaquery.scss│      ├── _mixins.scss│      ├── _normalize.scss│      ├── _utilities.scss│      ├── _variables.scss│      ├── main.scss│      └── mixins├── test

編譯 SCSS

scss 編譯為 css ,使用 node-sass .

安裝 node-sass

命令行輸入:

npm install --save-dev node-sass 或者 npm install -D node-sass

命令行腳本

安裝完成后,我們可以使用 node-sass 工具來構(gòu)建我的任務(wù): node-sass --output-style compressed -o dist/css src/sass
上面的命令行功能比較容易理解,就是 src/sass 下的 *scss 文件編譯成 css 文件,并輸出到 dist/css 目錄下,文件內(nèi)容的輸出風(fēng)格為 compressed ,輸出風(fēng)格可以任意選擇,可以使用 node-sass help 查看幫助。

寫入 package.jsonscripts 對(duì)象里

把上面的代碼放到 package.json 文件里, package.json 的內(nèi)容變成:

package.json

'scripts': {  'scss': 'node-sass --output-style compressed -o dist/css src/sass'}

運(yùn)行任務(wù)

npm run scss

使用 PostCSS 自動(dòng)補(bǔ)全 CSS 瀏覽器廠商前綴

用到的庫(kù) postcss-cli , autoprefixer

安裝 postcss-cli , autoprefixer

npm install -D postcss-cli autoprefixer

寫入 package.json 的 scripts 對(duì)象里

package.json

'scripts': {  ...  'autoprefixer': 'postcss -u autoprefixer -r dist/css/*'}

可以通過設(shè)置 autoprefixer 的相關(guān)參數(shù)來改變 autoprefixer 默認(rèn)瀏覽器支持。

校驗(yàn) javascript

eslint' class='reference-link'>安裝 eslint

npm i -D eslint 或者使用 npm install --save-dev eslint ,前者是后者的簡(jiǎn)寫方式。

運(yùn)行命令,初始化一些 hint 的基本規(guī)則

eslint --init

寫入 package.jsonscripts 對(duì)象里

package.json

'scripts': {  ...  'lint': 'eslint src/js'}

運(yùn)行任務(wù)

npm run lint

壓縮/混淆 javascript

依賴庫(kù) uglify-js

npm i -D uglify-js

寫入 package.jsonscripts 對(duì)象里

package.json

'scripts': {  ...  'uglify': 'mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js'}

運(yùn)行任務(wù)

npm run uglify

壓縮圖片

依賴庫(kù) imagemin-cli

npm i -D imagemin-cli

寫入 package.jsonscripts 對(duì)象里

package.json

'scripts': {  ...  'imagemin': 'imagemin src/images dist/images -p',}

運(yùn)行任務(wù)

npm run imagemin

開啟http靜態(tài)服務(wù)器

依賴庫(kù) BrowserSync

npm i -D browser-sync

寫入 package.jsonscripts 對(duì)象里

package.json

'scripts': {  ...  'serve': 'browser-sync start --server --files 'dist/css/*.css, dist/js/*.js''}

監(jiān)聽css和javascript的改變

依賴庫(kù): onchange

npm i -D onchange

寫入 package.jsonscripts 對(duì)象里

package.json

'scripts': {  ...  'watch:css': 'onchange 'src/scss/*.scss' -- npm run build:css',  'watch:js': 'onchange 'src/js/*.js' -- npm run build:js',}

使用 npm scripts 鉤子創(chuàng)建任務(wù)

pre-post- 腳本命令, npm run 為每條命令提供了 pre-post- 兩個(gè)鉤子(hook)。以 npm run install 為例,如果我們的 scripts 字段定義了 postinstall

package.json

'scripts': {  ...  'postinstall': 'npm run watch:all'}

執(zhí)行 npm run install 時(shí),任務(wù) postinstall 也會(huì)立即執(zhí)行,在團(tuán)隊(duì)里,這是一種非常好的協(xié)作方式,當(dāng)有人克隆我們的代碼后,執(zhí)行 npm install ,我們的 watch:all 任務(wù)也會(huì)跟著執(zhí)行,它會(huì)自動(dòng)的開啟一個(gè)服務(wù)器并打開默認(rèn)的瀏覽器,同時(shí)也會(huì)監(jiān)聽文件的修改。

使用內(nèi)部變量

scripts 字段可以使用一些內(nèi)部變量,主要是 package.json 的各種字段。內(nèi)部變量的主要特征是 $npm_package_key

比如, package.json 的內(nèi)容是

{  'name':'mobile-scaffold',  'version':'1.0.0'}

那么變量 $npm_package_name 的值是 mobile-scaffold ,變量 npm_package_version 的值是 1.0.0

{  'version': '1.0.0',  'scripts': {    ...    'bundle': 'mkdir -p build/$npm_package_version/'  }}

運(yùn)行 npm run bundle 以后,將會(huì)生成 build/1.0.0/ 子目錄。

config 字段也可以用于設(shè)置內(nèi)部字段。

{  'name': 'mobile-scaffold',  'config': {    'port': '3000'  },  'scripts': {    ...    'serve': 'http-server -p $npm_package_config_port'  }}

上面代碼中,變量 npm_package_config_port 對(duì)應(yīng)的就是 3000 。

使 npm run 命令可以接收參數(shù)

在一些任務(wù)里,我們需要根據(jù)不同的情形來傳遞參數(shù),最常見的例子就是提交 git commit -m 需要填寫一些信息,這時(shí), npm run 能接收參數(shù)就顯得非常重要了。

package.json 的內(nèi)容是:

{  'name': 'mobile-scaffold',  'scripts': {    ...    'preci': 'git add -A',    'ci': 'git commit -m',    'postci': 'git push origin master'  }}

運(yùn)行 npm run ci -- 'add git command task' ,這條命令執(zhí)行后,相繼發(fā)生:

  1. preci 任務(wù)執(zhí)行
  2. ci 任務(wù)執(zhí)行
  3. postci 任務(wù)執(zhí)行

痛點(diǎn)及解決之道

顯然,使用 npm scripts 也存在著一些問題: JSON 規(guī)范并不支持注釋,因此無法在 package.json 中添加注釋。不過有一些辦法可以突破這個(gè)限制:

  • 編寫小巧、命名良好、單一目的的腳本
  • 分離文檔與腳本(比如說放在README.md中)
  • 調(diào)用單獨(dú)的.js文件

相關(guān)鏈接

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Grunt 新手一日入門 | 于江水
自動(dòng)化構(gòu)建初體驗(yàn)
前端構(gòu)建工具gulp入門教程
前端掃盲
gulp應(yīng)用于ionic概述
webpack2 項(xiàng)目
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服