-Webpack: It's Not Magic | Naomi Jacobs | BuzzJS 2.0 2017
Apr 2015 - Sep 2020
https://npm-stat.com/
(function() {
var miScopedVarible = 10;
var notGlobalVar = "I am not global";
}());IIFE - Immediate Invoke Function Expression
<script src="bundle.js"></script>JS
webpack
main.js
[ entryModule, dependency1, dependency2, etc... ]JSON Loader - https://github.com/webpack-contrib/json-loader
Loader: is a function that takes in source code, makes changes, and returns the new code.
function jsonLoader (source) {
return "module.exports = " + JSON.stringify(source) + ";";
};module: {
rules: [
{
test: /\.vue$/,
loader: "vue-loader",
include: /src/
},
{
test: /\.js$/,
loader: "babel-loader",
exclude: /node_modules/
},
{
test: /\.less$/,
use: [
{
loader: "style-loader"
},
{
loader: "css-loader"
},
{
loader: "less-loader"
}
]
}
]
}module: {
rules: [
{
test: /\.vue$/,
loader: "vue-loader",
include: /src/
},
{
test: /\.js$/,
loader: "babel-loader",
exclude: /node_modules/
},
{
test: /\.less$/,
use: [
{
loader: "style-loader"
},
{
loader: "css-loader"
},
{
loader: "less-loader"
}
]
}
]
}less-loader
css-loader
style-loader
style.less
less-loader
css-loader
style-loader
*.css
less-loader
css-loader
style-loader
*.js
// double.js
module.exports = function (x) {
return x * 2;
};// double.js
function (module, webpackRequire) {
module.exports = function (x) {
return x * 2;
};
}// main.js
var doubleMethod = require("./double.js");
console.log(doubleMethod(2)); // 4// main.js
function (module, webpackRequire) {
var doubleMethod = webpackRequire(1);
console.log(doubleMethod(2)); // 4
}// A named JavaScript function.
function MyExampleWebpackPlugin() {
};
// Defines `apply` method in it's prototype.
MyExampleWebpackPlugin.prototype.apply = function(compiler) {
// Specifies webpack's event hook to attach itself.
compiler.plugin('webpacksEventHook', function(compilation, callback) {
console.log("This is an example plugin!!!");
// Invokes webpack provided callback after functionality is complete.
callback();
});
};var webpack = require('webpack')
// importing plugins that do not come by default in webpack
var ExtractTextPlugin = require('extract-text-webpack-plugin');
// adding plugins to your configuration
plugins: [
// build optimization plugins
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'vendor-[hash].min.js',
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_console: false,
}
}),
new ExtractTextPlugin({
filename: 'build.css'
}),
// compile time plugins
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"',
})
]// webpack.config.js
var path = require("path");
module.exports = {
entry: "./main.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js"
}
};// webpack.config.js
var path = require("path");
module.exports = {
entry: "./main.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js"
},
module: {
rules: [{
test: /\.js$/,
use: ["babel-loader"],
exclude: /node_modules/
}]
}
};$ webpack