Webpack使用入門

這里介紹webpack的基本使用俄占。

1、打包js后引用

1.1 文件準備

在一個單獨的目錄中新建配置文件00_webpackhello/package.json

{  
  "name": "00_webpackhello",  
  "version": "1.0.0",  
  "description": "",  
  "main": "index.js",  
  "scripts": {  
    "test": "echo \"Error: no test specified\" && exit 1",  
    "build": "webpack --mode development"  
  },  
  "keywords": [],  
  "author": "",  
  "license": "ISC",  
  "devDependencies":{  
    "webpack": "^5.74.0",  
    "webpack-cli": "^4.10.0"  
  }  
}

在同目錄下新建配置文件00_webpackhello/webpack.config.js

const path = require('path');  
  
module.exports = {  
    entry: './src/main.js',  
    output: {  
        path: path.resolve(__dirname, 'dist'),  
        filename: 'bundle.js',  
    },  
};

在相同目錄下新建src目錄钻趋,并創(chuàng)建待打包的js文件彤委。
00_webpackhello/src/compute.js

var testNum1 = 6, testNum2 = 3;  
function add(a, b) {  
    return a + b;  
}  
function minus(a, b) {  
    return a - b;  
}  
function multiply(a, b) {  
    return a * b;  
}  
function divide(a, b) {  
    return a / b;  
}  
//這里導出一個默認變量  
export {  
    add,  
    minus,  
    multiply,  
    divide  
}

00_webpackhello/src/main.js

import * as tmp from './compute.js'  
var num1 = 10, num2 = 2;  
alert("testNum1: " + ", testNum2: " +  " " + tmp.add(num1, num2) + " " + tmp.minus(num1, num2)+ " " + tmp.multiply(num1, num2)+ " " + tmp.divide(num1, num2));

添加gitignore配置文件00_webpackhello/.gitignore

dist/  
node_modules/

新建一個測試html文件,用于引用打包后的js文件曙蒸,看是否有效。
00_webpackhello/index.html

<!-- 其他省略 -->  
<body>  
<script src="dist/bundle.js"></script>  
</body>

1.2 環(huán)境安裝

在當前目錄下執(zhí)行如下npm install命令岗钩,npm會自動根據(jù)package.json配置文件中的依賴進行安裝纽窟。

$ npm install

up to date in 692ms
$ 

執(zhí)行完成后,這個目錄下會生成一個package-lock.json配置文件兼吓,我們一般不用管它臂港。同時,前面在package.json中配置的依賴,應該會自動安裝到00_webpackhello/node_modules目錄下审孽。

1.3 打包

在當前目錄下執(zhí)行打包命令:

$ npm run build

> 00_webpackhello@1.0.0 build
> webpack --mode development

asset bundle.js 4.79 KiB [emitted] (name: main)
runtime modules 670 bytes 3 modules
cacheable modules 513 bytes
  ./src/main.js 219 bytes [built] [code generated]
  ./src/compute.js 294 bytes [built] [code generated]
webpack 5.75.0 compiled successfully in 132 ms
$ 

在當前目錄會新生成一個dist目錄县袱,其中包含打包生成的文件00_webpackhello/dist/bundle.js。打包之后的完整目錄結(jié)構(gòu)如下圖佑力。

image.png

1.4 測試

這時候式散,如果在瀏覽器中打開前面創(chuàng)建的index.html,可以看到js已經(jīng)生效打颤。如下圖暴拄。


image.png

2、打包為js依賴庫

2.1 直接作為依賴庫引用報錯

前面的例子中编饺,如果在index.html中直接寫一個script標簽乖篷,調(diào)用add函數(shù),如下:

<!-- 其他省略 -->  
<body>  
<script src="dist/bundle.js"></script>  
<script>  
    alert(add(1,2));  
</script>  
</body>

會報錯add沒有定義透且。這是因為在javascript的模塊化語法里面撕蔼,在每一個模塊文件中定義的函數(shù)和變量都是局部變量,所以秽誊,在模塊范圍之外沒法引用鲸沮。

2.2 依賴庫打包配置說明

webpack支持將js文件打包為依賴庫,供其他人調(diào)用养距。通過library的配置可以支持指定庫的名稱诉探, libraryTarget指定庫打包出來的規(guī)范。
其中棍厌,可選的值有“var肾胯、assign、this耘纱、window敬肚、global、commonjs束析、commonjs2艳馒、commonjs”。
不同取值的打包行為說明如下:

// var config  
{  
    output: {  
        library: 'myLib',  
            filename: 'var.js',  
            libraryTarget: 'var'  
    }  
}  
// output  
var myLib = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// assign config  
{  
    output: {  
        library: 'myLib',  
            filename: 'assign.js',  
            libraryTarget: 'assign'  
    }  
}  
// output: 少了個 var  
myLib = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// this config{  
{  
    output: {  
        library: 'myLib',  
            filename: 'this.js',  
            libraryTarget: 'this'  
    }  
}  
// output  
this["myLib"] = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// window config  
{  
    output: {  
        library: 'myLib',  
            filename: 'window.js',  
            libraryTarget: 'window'  
    }  
}  
// output  
window["myLib"] = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// global config  
{  
    output: {  
        library: 'myLib',  
            filename: 'global.js',  
            libraryTarget: 'global'  
    }  
}  
  
// output:注意 target=node 的時候才是 global员寇,默認 target=web下global 為 window  
window["myLib"] = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// commonjs config  
{  
    output: {  
        library: 'myLib',  
            filename: 'commonjs.js',  
            libraryTarget: 'commonjs'  
    }  
}  
// output  
exports["myLib"] = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// amd config  
{  
    output: {  
        library: 'myLib',  
            filename: 'amd.js',  
            libraryTarget: 'amd'  
    }  
}  
// output  
define('myLib', [], function () {  
    return (function (modules) { })({  
        './src/index.js': function (module, exports) { }  
    });  
});  
// ===============================================  
  
// umd config  
{  
    output: {  
        library: 'myLib',  
            filename: 'umd.js',  
            libraryTarget: 'umd'  
    }  
}  
// output  
(function webpackUniversalModuleDefinition(root, factory) {  
    if (typeof exports === 'object' && typeof module === 'object')  
        module.exports = factory();  
    else if (typeof define === 'function' && define.amd) define([], factory);  
    else if (typeof exports === 'object') exports['myLib'] = factory();  
    else root['myLib'] = factory();  
})(window, function () {  
    return (function (modules) { })({  
        './src/index.js': function (module, exports) { }  
    });  
});  
// ===============================================  
  
// commonjs2 config  
{  
    output: {  
        library: 'myLib',  
            filename: 'commonjs2.js',  
            libraryTarget: 'commonjs2'  
    }  
}  
//output  
module.exports = (function(modules) {})({  
    './src/index.js': function(module, exports) { }  
});  
// ===============================================  
  
// umd2 config  
{  
    output: {  
        library: 'myLib',  
            filename: 'umd2.js',  
            libraryTarget: 'umd2'  
    }  
}  
// output  
(function webpackUniversalModuleDefinition(root, factory) {  
    if (typeof exports === 'object' && typeof module === 'object')  
        module.exports = factory();  
    else if (typeof define === 'function' && define.amd) define([], factory);  
    else if (typeof exports === 'object') exports['myLib'] = factory();  
    else root['myLib'] = factory();  
})(window, function () {  
    return (function (modules) { })({  
        './src/index.js': function (module, exports) {  
        }  
    });  
});  
// ===============================================  
  
// commonjs-module config  
{  
    output: {  
        library: 'myLib',  
            filename: 'commonjs-module.js',  
            libraryTarget: 'commonjs-module'  
    }  
}  
// output  
module.exports = (function (modules) { })({  
    './src/index.js': function (module, exports) { }  
});  
// ===============================================  
  
// jsonp config  
{  
    output: {  
        library: 'myLib',  
            filename: 'jsonp.js',  
            libraryTarget: 'jsonp'  
    }  
}  
// output  
myLib((function (modules) { })({  
    './src/index.js': function (module, exports) { }  
}));  
// ===============================================

簡單說明見下圖:


image.png

2.3 依賴庫打包示例

這里將前面的例子中的代碼弄慰,打包為可以在script標簽中引用的依賴庫。
首先蝶锋,修改打包的配置文件00_webpackhello/webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
        //指定打包后的庫通過全局變量的方式暴露
        libraryTarget: "var",
        //指定打包后的庫名
        library: "MATH"
    },
};

然后陆爽,修改測試文件00_webpackhello/index.html,在script標簽中調(diào)用前面的依賴函數(shù)扳缕,如下慌闭。

<!-- 其他省略 -->  
<body>  
<script src="dist/bundle.js"></script>  
<script>  
    alert(MATH.add(1,2));  
</script>  
</body>

這樣别威,在00_webpackhello目錄下執(zhí)行npm run build打包命令之后,在瀏覽器中打開測試文件00_webpackhello/index.html驴剔,可以看到能夠正常被調(diào)用省古。第一個alert彈出之后,第二個alert丧失,也可以正常彈出豺妓,如下圖:

image.png

實際上,這樣打包之后布讹,也可以在單獨的js文件中引用科侈。這里新建一個00_webpackhello/callTest.js文件:

alert(MATH.multiply(22,2));

在測試文件00_webpackhello/index.html中,引用這個文件炒事,如下:

<!-- 其他省略 -->  
<body>  
<script src="dist/bundle.js"></script>  
<script src="callTest.js"></script>  
<script>  
    alert(MATH.add(1,2));  
</script>  
</body>

在瀏覽器中打開上述測試文件之后,可以看到三個alert框蔫慧,說明在單獨的js文件中挠乳,也可以被調(diào)用到。

3姑躲、打包css

3.1 將css打包到js中

3.1.1 預處理器css-loader和style-loader簡介

這里需要用到兩個預處理器css-loader和style-loader睡扬。css-loader的作用是解析css文件,包括解析@import等css自身語法黍析,它會將解析后的css文件以字符串的形式打包到js文件中(但此時卖怜,css樣式并不會生效,因為需要把css文件插入到html中才會生效)阐枣。style-loader的作用就是把js中的樣式代碼插入到html中马靠。它的原理很簡單,就是通過動態(tài)生成style標簽并將其插入到html文件的head標簽中蔼两。

3.1.2 打包css到js示例

在一個新的目錄01_webpackhello中新建如下文件甩鳄。
npm配置文件,01_webpackhello/package.json

{  
  "name": "00_webpackhello",  
  "version": "1.0.0",  
  "description": "",  
  "main": "index.js",  
  "scripts": {  
    "test": "echo \"Error: no test specified\" && exit 1",  
    "build": "webpack --mode development"  
  },  
  "keywords": [],  
  "author": "",  
  "license": "ISC",  
  "devDependencies": {  
    "css-loader": "^6.7.2",  
    "style-loader": "^3.3.1"  
  }  
}

webpack配置文件额划,01_webpackhello/webpack.config.js

const path = require('path');  
  
module.exports = {  
    entry: './src/main.js',  
    output: {  
        path: path.resolve(__dirname, 'dist'),  
        filename: 'bundle.js'  
    },  
    module: {  
        rules: [  
            {  
                test: /\.css$/i,  
                //執(zhí)行順序從右向左妙啃,將css-loader處理后的結(jié)果傳給style-loader  
                use: ['style-loader', 'css-loader'],  
            },  
        ],  
    },  
};

添加gitignore配置文件01_webpackhello/.gitignore

dist/  
node_modules/

新建javascript代碼,01_webpackhello/src/main.js

import './css/all.css'; // 使用 ESM 方式引入  
const name = 'Paopao';  
alert('Hello ' + name);  
console.log('Hello ' + name);

新建css代碼俊戳,01_webpackhello/src/css/all.css

.text-primary {
    color: rgb(37, 37, 177);
}

新建一個測試打包效果的html文件揖赴,01_webpackhello/index.html

<html>
<head>
    <!-- 引入打包生成的 JavaScript -->
    <script src="dist/bundle.js"></script>
</head>
<body>
<h1 class="text-primary" id="hello_h1">Hello World</h1>
</body>
</html>

在該目錄下執(zhí)行npm install命令,npm會自動根據(jù)package.json配置文件中的依賴進行安裝抑胎。
然后燥滑,執(zhí)行npm run build命令,就可以執(zhí)行打包操作圆恤。打包后的目錄結(jié)構(gòu)如下突倍。

image.png

這時候腔稀,在瀏覽器中打開前面新建的01_webpackhello/index.html,可以看到css已經(jīng)生效羽历,彈出alert框之后焊虏,字體顯示為藍色,如下秕磷。

image.png

3.2 處理css引入的圖片

3.2.1 file-loader簡介

file-loader是一個文件資源預處理器诵闭,作用是:處理文件導入語句(比如js的import ... from ...和css中的url())并替換成它的訪問地址,同時把文件輸出到相應的位置澎嚣。

3.2.2 處理css引入圖片的打包示例

首先疏尿,修改npm配置文件01_webpackhello/package.json

{
  "name": "00_webpackhello",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode development"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^5.0.2",
    "style-loader": "^2.0.0",
    "file-loader": "^5.1.0"
  }
}

注意:如果style-loader、css-loader易桃、file-loader這幾個的版本號不配套褥琐,會導致一個圖片打包后生成兩個,其中一個還不能用的情況晤郑。
修改webpack配置文件敌呈,增加file-loader的處理,01_webpackhello/webpack.config.js

const path = require('path');

module.exports = {
   entry: './src/main.js',
   output: {
       path: path.resolve(__dirname, 'dist'),
       filename: 'bundle.js'
   },
   module: {
       rules: [
           {
               test: /\.css$/I,
               //執(zhí)行順序從右向左造寝,將css-loader處理后的結(jié)果傳給style-loader
               use: ['style-loader', 'css-loader'],
           },
           {
               test: /\.png$/,
               use: "file-loader"
           }
       ],
   },
};

修改樣式表文件磕洪,01_webpackhello/src/css/all.css

.text-primary {  
    color: rgb(37, 37, 177);  
}  
body{  
    background: url("img/cat.png") no-repeat;  
}

同時,新增一個圖片文件img/cat.png诫龙。
在該目錄下執(zhí)行npm install命令析显,npm會自動根據(jù)package.json配置文件中的依賴進行安裝。
然后签赃,執(zhí)行npm run build命令谷异,就可以執(zhí)行打包操作。打包后的目錄結(jié)構(gòu)如下锦聊。

image.png

這時晰绎,在瀏覽器中打開前面新建的01_webpackhello/index.html,可以看到css已經(jīng)生效括丁,彈出alert框之后荞下,字體顯示為藍色,并且有背景圖片史飞,如下尖昏。

image.png

3.2.3 指定css引入圖片打包后的文件名和存放路徑

前面的例子中,可以看出构资,css引用的圖片在打包之后抽诉,文件名成了一個hash串。如果我們想要指定圖片文件名和存放位置吐绵,只需要修改webpack配置文件迹淌,給file-loader傳入options河绽。如下。
01_webpackhello/webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.css$/I,
                //執(zhí)行順序從右向左唉窃,將css-loader處理后的結(jié)果傳給style-loader
                use: ['style-loader', 'css-loader'],
            },
            {
                test: /\.png$/,
                use: {
                    loader: "file-loader",
                    options: {
                        name: 'img/[name].[ext]'
                    }
                }
            }
        ],
    },
};

執(zhí)行npm run build命令耙饰,就可以執(zhí)行打包操作。打包后的目錄結(jié)構(gòu)如下纹份。

image.png

苟跪,在瀏覽器中打開前面新建的01_webpackhello/index.html,可以看到css已經(jīng)生效蔓涧,彈出alert框之后件已,字體顯示為藍色,并且有背景圖片元暴,如下篷扩。

image.png

3.3 將css打包成到單獨的文件

還是前面的例子,代碼不變茉盏,修改打包的相關配置瞻惋。
首先,修改npm配置文件01_webpackhello/package.json援岩,增加mini-css-extract-plugin依賴:

{  
  "name": "00_webpackhello",  
  "version": "1.0.0",  
  "description": "",  
  "main": "index.js",  
  "scripts": {  
    "test": "echo \"Error: no test specified\" && exit 1",  
    "build": "webpack --mode development"  
  },  
  "keywords": [],  
  "author": "",  
  "license": "ISC",  
  "devDependencies": {  
    "css-loader": "^5.0.2",  
    "style-loader": "^2.0.0",  
    "file-loader": "^5.1.0",  
    "mini-css-extract-plugin": "^2.6.1"  
  }  
}

修改打包的配置文件01_webpackhello/webpack.config.js,這里將css打包到dist/css/img/main.css

const path = require('path');  
//step 1: 加載mini-css-extract-plugin  
const MiniCssExtractPlugin = require('mini-css-extract-plugin');  
  
module.exports = {  
    //這樣掏导,可以配置多個entry享怀,同時打包多個文件  
    entry: {  
      main: './src/main.js',  
    },  
    output: {  
        path: path.resolve(__dirname, 'dist'),  
        filename: 'bundle.js'  
    },  
    module: {  
        rules: [  
            {  
                test: /\.css$/i,  
                //執(zhí)行順序從右向左,將css-loader處理后的結(jié)果傳給MiniCssExtractPlugin.loader  
                use: [MiniCssExtractPlugin.loader, 'css-loader'],  
            },  
            {  
                test: /\.png$/,  
                use: {  
                    loader: "file-loader",  
                    options: {  
                        name: 'css/img/[name].[ext]'  
                    }  
                }  
            }  
        ],  
    },  
  
    //step 2: 創(chuàng)建mini-css-extract-plugin實例  
    plugins: [  
        new MiniCssExtractPlugin({  
            //指定css輸出的文件  
            filename: 'css/[name].css'  
        })  
    ]  
};

修改測試的html文件01_webpackhello/index.html趟咆,引用前面打包的css:

<html>  
<head>  
    <!-- 引入打包生成的 JavaScript -->  
    <!--<script src="dist/bundle.js"></script>-->    <link rel="stylesheet" href="dist/css/main.css"/>  
</head>  
<body>  
<h1 class="text-primary" id="hello_h1">Hello World</h1>  
</body>  
</html>

在該目錄下執(zhí)行npm install命令添瓷,npm會自動根據(jù)package.json配置文件中的依賴進行新增安裝mini-css-extract-plugin
然后值纱,執(zhí)行npm run build命令鳞贷,就可以執(zhí)行打包操作。

image.png

虐唠,在瀏覽器中打開前面新建的01_webpackhello/index.html搀愧,可以看到css已經(jīng)生效,彈出alert框之后疆偿,字體顯示為藍色咱筛,并且有背景圖片,如下杆故。

image.png

3.4 使用asset modules處理圖片文件

asset modules是webpack5新加入的功能迅箩,稱為資源模塊,通過它处铛,無需使用額外的預處理器饲趋,就可以將圖片和字體等文件進行解析和處理拐揭。
在上面例子的基礎上,修改webpack打包的配置文件01_webpackhello/webpack.config.js奕塑,通過asset modules處理圖片資源:

const path = require('path');  
//step 1: 加載mini-css-extract-plugin  
const MiniCssExtractPlugin = require('mini-css-extract-plugin');  
  
module.exports = {  
    //這樣堂污,可以配置多個entry,同時打包多個文件  
    entry: {  
      main: './src/main.js',  
    },  
    output: {  
        path: path.resolve(__dirname, 'dist'),  
        filename: 'bundle.js'  
    },  
    module: {  
        rules: [  
            {  
                test: /\.css$/i,  
                //執(zhí)行順序從右向左爵川,將css-loader處理后的結(jié)果傳給MiniCssExtractPlugin.loader  
                use: [MiniCssExtractPlugin.loader, 'css-loader'],  
            },  
            {  
                test: /\.png$/,  
                type: 'asset/resource',  
                generator: {  
                    filename: 'css/img/[name].[ext]'  
                }  
            }  
        ],  
    },  
  
    //step 2: 創(chuàng)建mini-css-extract-plugin實例  
    plugins: [  
        new MiniCssExtractPlugin({  
            //指定css輸出的文件  
            filename: 'css/[name].css'  
        })  
    ]  
};

執(zhí)行npm run build命令敷鸦,就可以執(zhí)行打包操作。

image.png

寝贡,在瀏覽器中打開前面新建的01_webpackhello/index.html扒披,可以看到css已經(jīng)生效,彈出alert框之后圃泡,字體顯示為藍色碟案,并且有背景圖片,如下颇蜡。

image.png

參考資料

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末价说,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子风秤,更是在濱河造成了極大的恐慌鳖目,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤弦,死亡現(xiàn)場離奇詭異领迈,居然都是意外死亡,警方通過查閱死者的電腦和手機碍沐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門狸捅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人累提,你說我怎么就攤上這事尘喝。” “怎么了斋陪?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵朽褪,是天一觀的道長。 經(jīng)常有香客問我无虚,道長鞍匾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任骑科,我火速辦了婚禮橡淑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咆爽。我一直安慰自己梁棠,他們只是感情好置森,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著符糊,像睡著了一般凫海。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上男娄,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天行贪,我揣著相機與錄音,去河邊找鬼模闲。 笑死建瘫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的尸折。 我是一名探鬼主播啰脚,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼实夹!你這毒婦竟也來了橄浓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤亮航,失蹤者是張志新(化名)和其女友劉穎荸实,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴淋,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡准给,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宴猾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡叼旋,死狀恐怖仇哆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夫植,我是刑警寧澤讹剔,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站详民,受9級特大地震影響延欠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沈跨,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一由捎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饿凛,春花似錦狞玛、人聲如沸软驰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锭亏。三九已至,卻和暖如春硬鞍,著一層夾襖步出監(jiān)牢的瞬間慧瘤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工固该, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锅减,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓蹬音,卻偏偏與公主長得像上煤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子著淆,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • webpack有什么作用劫狠? Webpack 是一個前端資源加載/打包工具,只需要相對簡單的配置就可以提供前端工程化...
    寧靜的夜閱讀 2,704評論 0 4
  • node安裝就自行百度吧永部! 確保你已經(jīng)進入項目根目錄独泞,npm init 創(chuàng)建 package.json 文件 we...
    ysp123閱讀 422評論 0 0
  • 前提:先安裝好nodejs,并配置好環(huán)境變量苔埋∨成埃可以全局使用node npm 命令 1. 初始化項目 新建一個目錄,...
    Kagari閱讀 798評論 0 0
  • 什么是webpack组橄?我的理解是文件打包及資源處理荞膘,當然功能肯定不局限于此。學習前提:了解npm玉工,了解node.j...
    yozosann閱讀 1,725評論 2 15
  • webpack的主要功能 它提供了友好的前端模塊化開發(fā)的支持羽资,以及代碼壓縮混淆、處理瀏覽器端javascript ...
    stamSuper閱讀 2,813評論 0 1