全局安裝是把包安裝在Node安裝目錄下的node_modules文件夾中,通常在 \Users\用戶名\AppData\Roaming\ 目錄下,可使用npm root -g查看全局安裝目錄javascript
本地(局部)安裝是把包安裝在指定項目(要在指定的根目錄下輸入命令)的node_modules文件夾下(若沒有,會自動建立一個node_modules文件夾)css
具體區別,推薦博文: 全局安裝和本地(局部)安裝的區別html
本地安裝可讓每一個項目擁有獨立的包,不受全局包的影響,方便項目的移動、複製、打包等,保證不一樣版本包之間的相互依賴,前端
項目構建能夠減小項目的重量,java
簡化項目構建,自動化完成構建node
主要有三種:Grunt、Gulp、Webpackwebpack
是一套前端自動化構建工具,一個基於nodeJs的命令行工具,它是一個任務運行器, 配合其豐富強大的插件git
執行任務時是同步的,要注意任務的順序github
全局安裝 grunt-cli:npm install -g grunt-cliweb
局部安裝grunt:npm install grunt --save-dev
此配置文件本質就是一個node函數類型模塊
配置編碼包含3步:
1. 初始化插件配置 2. 加載插件任務
3. 註冊構建任務基本編碼:
module.exports = function(grunt){ // 1. 初始化插件配置
grunt.initConfig({ //主要編碼處
}); // 2. 加載插件任務 // grunt.loadNpmTasks('grunt-contrib-concat'); // 3. 註冊構建任務
grunt.registerTask('default', []); };
gulp是與grunt功能相似的前端項目構建工具, 也是基於Nodejs的自動任務運行器
能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的合併、壓縮、檢查、監聽文件變化、瀏覽器自動刷新、測試等任務
gulp更高效(異步多任務), 更易於使用, 插件高質量
gulpfile.js-----gulp配置文件 任務執行時,會首先執行該文件
//引入gulp模塊
var gulp = require('gulp');
//註冊任務
gulp.task('任務名', function() {
// 任務的操做
});
//註冊默認任務
gulp.task('default', ['任務名'])
gulp 任務名 會執行gulpfile.js文件中指定的任務
下載插件(可一次下載安裝多個,安裝在項目根目錄下):
npm install gulp-concat gulp-uglify gulp-rename --save-dev
npm install gulp-less gulp-clean-css --save-dev
var gulp = require('gulp');//引入的gulp是一個對象 //引入的插件 均爲方法 var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); var less = require('gulp-less'); var cssClean = require('gulp-clean-css'); //註冊任務(基本語法) // gulp.task('任務名',function(){ // //任務的操做 // // }) //註冊 合併壓縮js的任務 gulp.task('js',function(){ return gulp.src('src/js/*.js') //找到目標源文件,將數據讀取到gulp的內存中 *表明所有文件 .pipe(concat('build.js')) //參數爲 合併後 js文件的名字 .pipe(gulp.dest('dist/js/')) //參數爲 輸出文件到的文件夾 只要尚未操做完說明當前的文件還在內存中 .pipe(uglify()) //壓縮文件 .pipe(rename({suffix:".min"}))//重命名 .pipe(gulp.dest('dist/js/')); }); //註冊 轉換less爲css的任務 gulp.task('less',function(){ //帶上return 爲異步 ;不帶return 爲同步;異步速度快,由於任務能夠同時加載,建議用異步 return gulp.src('src/less/*.less') .pipe(less()) //編譯less文件爲css文件 .pipe(gulp.dest('src/css/')) }); //註冊 合併壓縮css文件的任務 gulp.task('css',['less'],function(){ //['less'] 表示 css任務的執行依賴於less任務,只有當less任務所有執行後,纔會開啓css任務 return gulp.src('src/css/*.css') //找到文件 .pipe(concat('build.css')) //合併文件 .pipe(cssClean()) //壓縮文件 .pipe(rename({suffix: '.min'})) //重命名 .pipe(gulp.dest('dist/css/')); //輸出文件 }); //註冊 默認任務 gulp.task('default',['js','less','css']);
終端處 在項目根目錄下 輸入:
目錄結構大體以下:
最後還有一個自動編譯插件(即源碼發生改變時,原先通過處理的文件會自動更新,不用再從新gulp構建一遍)
自動編譯
下載插件: npm install gulp-livereload --save-dev 配置編碼:: var livereload = require('gulp-livereload'); //全部的任務後邊 都要加上一個「管道」,來保持更新:
.pipe(livereload()); //註冊 監測任務
gulp.task('watch', ['default'], function () { //開啓監視:
livereload.listen(); //監視指定的文件, 並指定對應的處理任務
gulp.watch('src/js/*.js',['js']); gulp.watch(['src/css/*.css','src/less/*.less'],['css']) });
這樣,當文件發生改變時,不用再從新gulp,編譯的文件會自動發生改變
Webpack是前端資源模塊化管理和打包工具,一個模塊打包器(bundler)。
在Webpack看來, 前端的全部資源文件(js/json/css/img/less/...)都會做爲模塊處理
它將根據模塊的依賴關係進行靜態分析,生成對應的靜態資源
Webpack的工做方式是:把你的項目當作一個總體,經過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到你的項目的全部依賴文件,使用loaders處理它們,最後打包爲一個(或多個)瀏覽器可識別的JavaScript文件。
與gulp和grunt相比,Webpack的處理速度更快更直接,能打包更多不一樣類型的文件,更主要的區別仍是 webpack是一個模塊化打包工具。
./dist
。基本上,整個應用程序結構,都會被編譯到你指定的輸出路徑的文件夾中。require()
引入,而後把它添加到 plugins
數組中全局安裝:
npm install webpack webpack-cli --g
局部安裝(本地安裝):
npm install webpack webpack-cli --save-dev
const path = require('path');//path是內置的模塊,用來設置路徑
const HtmlWebpackPlugin = require('html-webpack-plugin'); //自動生成html文件的插件
const CleanWebpackPlugin = require('clean-webpack-plugin'); //清除以前打包的文件
module.exports = { entry: './src/js/entry.js', // 入口文件
output: { // 輸出配置
filename: 'bundle.js', // 輸出文件名
path: path.resolve(__dirname, 'dist/js') //輸出文件路徑配置 __dirname表明根目錄
},
module: { rules: [ //樣式 loader
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { //圖片 loader
test: /\.(png|jpg|gif)$/, use: [ { loader: 'url-loader', options: { limit: 8192 } } ] } ] },
devServer: {//熱部署
contentBase: 'dist/js/' //若爲空 webpack-dev-server默認服務於根目錄下的index.html
},
plugins: [ //插件列表
new HtmlWebpackPlugin({template: './index.html'}), new CleanWebpackPlugin(['dist']), ] };