`

webpack使用

 
阅读更多

1.npm install webpack --save-dev

2.安装加载器

   npm install babel-loader --save-dev

   npm install babel-core --save-dev

   npm install babel-preset-es2015 --save-dev     //es6转码规则

 

   npm install style-loader --save-dev

   npm install css-loader --save-dev

   npm install less --save-dev

   npm install less-loader --save-dev //样式加载器

 

   npm install extract-text-webpack-plugin --save-dev //分离css

3.配置webpack.config.js

 

var webpack=require("webpack");
var ExtractTextPlugin=require("extract-text-webpack-plugin"); // 分离css
var path=require("path");
var fs=require("fs");

function getEntry(){
	var jsPath="./src/js/";
	var dirs=fs.readdirSync(jsPath);
	var matchs=[], files={};
  	dirs.forEach(function (item) {
	    matchs=item.match(/(.+)\.js$/);
	    if (matchs){
	      	files[matchs[1]]=path.resolve(jsPath,item);
	    }
  	});
  	return files;
};

module.exports = {  
    // 入口文件位置  
    entry:getEntry(),  
    // 输出文件位置
    output:{
        path:"./dist/",
        publicPath:"./dist/",
        filename:"[name].js"
    },  
    module:{
    	  // require加载时编译
        loaders:[  
            { test:/\.js$/, exclude:/node_modules/, loaders:["babel-loader"] },
            { test:/\.less$/, loader:ExtractTextPlugin.extract("style-loader","css-loader!less-loader") }
        ]
    },
    resolve:{
    	  extensions:["",".coffee",".js"],
    	  // 配置别名,方便require
    	  alias:{
            asset:__dirname+"/asset/",
      		  /*jquery:__dirname+"/asset/js/jquery-1.12.2.min.js",
            bootstrap:__dirname+"/asset/bootstrap/",
            bootstrapTable:__dirname+"/asset/bootstrap-table/",*/
    	  }
    },
    // 外部文件形式
    externals:{
        jquery:'window.jQuery'
    },
    plugins:[
    	// 提供全局变量,无须require载入
    	new webpack.ProvidePlugin({
      		jQuery:"jquery",
      		$:"jquery"
    	}),
    	// 自动抽离公共代码
    	new webpack.optimize.CommonsChunkPlugin('common.js'),
      // 分离css
      new ExtractTextPlugin("[name].css"),
    	/*// 压缩js文件
    	new webpack.optimize.UglifyJsPlugin({
      		compress:{
        		warnings:false
      		}
    	})*/
    ]
};

 4.配置.babelrc

{
    "presets":["es2015"]
}

 5.编译webpack --display-error-details

 

6.生成测试文件

var fs=require("fs");
var path=require("path");

var jsPath="./src/",testPath="./test/",demo="test.html";

function createTestFile(source,target){

	var dirs=fs.readdirSync(source);

	dirs.forEach(function(item){
		var stat=fs.statSync(path.join(source,item));

		if ( stat.isDirectory() ){
			if ( !fs.existsSync(path.join(target,item)) ){
				fs.mkdirSync(path.join(target,item));
			};
			
			createTestFile(path.join(source,item),path.join(target,item));
		}else{
			var file=item.slice(0,item.indexOf("."));
			var suffix=item.slice(item.indexOf(".")+1);

			if ( !path.join(target,file+".html") ){
				var html=fs.readFileSync(path.join(testPath,demo),"utf8");
				fs.writeFileSync(path.join(target,file+".html"),html, {encoding:"utf8"});
			};
		};
	});
};

createTestFile(jsPath,testPath);

 7.测试文件demo

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.11.0.css"/>
	<script src="http://code.jquery.com/qunit/qunit-1.11.0.js"></script>
	<script src="../dist/common.js" type="text/javascript"></script>
	<script src="../dist/index.js" type="text/javascript"></script>
</head>

<body>
	<h1 id="qunit-header">QUnit测试</h1>
    <h2 id="qunit-banner"></h2>
    <div id="qunit-testrunner-toolbar"></div>
    <h2 id="qunit-userAgent"></h2>
    <ol id="qunit-tests"></ol>
    <div id="qunit-fixture">测试标记</div>
</body>

<script type="text/javascript">

var a;
module("sum",{
    // 在每个测试之前运行
    setup: function(){
    	a=23;
    },
    // 在每个测试之后运行
    teardown: function(){
    }
});

test("sum", function(){
    equal( sum(a,2), 4, "匹配" );
});

/*// 异步测试1
test("async", function() {
    stop();// 终止qunit测试
    $.getJSON("resource", function(result) {
        deepEqual(result, {
            status: "ok"
        });
        start();
    });
});

// 异步测试2
asyncTest("async2", function() {
	expect(1);// 判断1次
    $.getJSON("resource", function(result) {
        deepEqual(result, {
            status: "ok"
        });
        start();
    });
});

// 测试抛出错误,raises第二个参数为正则或构造函数,判断错误是否构造函数的实例
test("raises", function() {
    function CustomError() {}
    raises(function() {
        throw new CustomError();
    }, CustomError, "must throw error to pass");
});

// 添加测试方法
function domEqual( selector, modifier, message ) {
    var attributes = ["class", "role", "id", "tabIndex", "aria-activedescendant"];
    
    function extract(value) {
        var result = {};
        result.nodeName = value[0].nodeName;
        $.each(attributes, function(index, attr) {
            result[attr] = value.attr(attr);
        });
        result.children = [];
        var children = value.children();
        if (children.length) {
            children.each(function() {
                result.children.push(extract($(this)));
            });
        } else {
            result.text = value.text();
        }
        return result;
    }
    var expected = extract($(selector));
    modifier($(selector));
    
    var actual = extract($(selector));
    QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
}*/
</script>
</html>

 

备注:

被依赖的模块不能作为entry中的配置项

 

 

与gulp相结合

1.npm install gulp --save-dev

2.npm install webpack-stream --save-dev //gulp-webpack插件

3.配置gulpfile.js

 

var gulp=require("gulp");
var webpack=require("webpack");// 模块化加载
var webpackConfig=require("./webpack.config.js");// webpack配置文件
var less=require("gulp-less");// 编译less
var minifycss=require("gulp-clean-css");// 压缩css
var watch=require("gulp-watch");// 通过监听实时启动gulp任务
var rename=require("gulp-rename");// 文件重命名
var notify=require("gulp-notify");// 控制台打印工具

var dash="\n\n--------------------------------\n\n";
var paths={
    scripts:"src/js/*.js",
    less:"src/css/*.less"
}

gulp.task("webpack",function(callback){

    var myConfig=Object.create(webpackConfig);

    webpack(myConfig,function(err,stats){
        callback();
    });
});

gulp.task("less",function(){
    gulp.src("src/css/*.less")
        .pipe( less() )
        .pipe( gulp.dest("public/dist/css") )// 输出未压缩文件
        .pipe( minifycss() )
        .pipe( rename( {suffix:'.min'} ) )
        .pipe( gulp.dest("public/dist/css") )
        .pipe( notify({ message:"Compile less file successfully."}) );// 输出压缩文件
});

gulp.task("server",function(){
    require("./app.js");
    console.log(dash+"KOA server is running at http://127.0.0.1:3005/."+dash)
});

gulp.task("watch",function(){
    gulp.watch(paths.less,["less","server"]);
    gulp.watch(paths.scripts,["webpack","server"]);
})

gulp.task("default",["webpack","less","server","watch"]);

 

4.webpack.config.js同单独使用webpack时

 

 

 

 

0
0
分享到:
评论

相关推荐

    webpack使用Vue学习案例

    在"webpack使用Vue学习案例"中,我们将深入理解如何将这两个强大的工具结合,以构建高效的前端项目。 首先,让我们了解Webpack的基础。Webpack 将应用程序视为由多个模块组成,这些模块可以是 JavaScript 文件、CSS...

    webpack使用ParallelUglifyPlugin实例

    webpack使用ParallelUglifyPlugin实例webpack使用ParallelUglifyPlugin实例webpack使用ParallelUglifyPlugin实例webpack使用ParallelUglifyPlugin实例

    webpack使用方法说明

    webpack使用方法说明

    webpack使用使用TreeShaking实例

    3. **使用 terser-webpack-plugin**:Webpack 4及以上版本默认使用 terser 插件进行代码压缩,这个插件支持Tree Shaking。确保配置正确,以便在压缩阶段进行未使用代码的消除。 `.babelrc`文件用于配置Babel,Babel...

    webpack-使用webpack-dev-server.rar

    要使用 `webpack-dev-server`,首先需要安装它作为项目的开发依赖: ```bash npm install --save-dev webpack-dev-server ``` 然后,在 `webpack.config.js` 配置文件中添加 `devServer` 配置项: ```javascript ...

    webpack使用DllPlugin实例

    `DllPlugin`是Webpack提供的一种优化技巧,用于预先构建常被使用的库或模块,以提高项目的构建速度。 `webpack_dll.config.js`是配置DllPlugin的文件,它定义了哪些模块会被打包到一个单独的DLL(动态链接库)中。...

    WebPack的高级使用

    在中级到高级的Webpack使用中,我们将涉及以下知识点: 1. **代码分割(Code Splitting)**:通过动态导入或配置 `splitChunks`,将大型应用的不同部分拆分成多个小块,按需加载,提高页面性能。 2. **Tree ...

    Webpack使用指南.pdf

    帮助前端程序实现模块的依赖打包,压缩代码,优化代码;主要运用于前端框架,比如vue,react等。优点代码压缩,代码合并,使用精灵图减少请求次数,减少cookie的发送,css前置、js后置,使用浏览器缓存静态资源

    webpack使用说明.md

    这个文件较为详细的描述了webpack的使用方法以及配合vue的使用,总结不易,希望能帮助到需要的人。

    浅析html webpack plugin插件的使用教程

    使用前提:项目中安装了Webpack使用步骤: 步骤一、在项目的根目录下输入cnpm i html-webpack-plugin -D 将html-webpack-plugin插件安装到开发依赖 其作用是根据指定的模板页面在内存中生成相应的HTML页面 步骤二、...

    webpack5 文档资料

    4. **配置文件**:Webpack 使用 `webpack.config.js` 文件来配置其行为。这里可以定义入口(entry)、输出(output)、模块规则(module rules)、插件(plugins)等。在提供的文件列表中,没有这个文件,但通常会在项目根...

    Webpack2 中文文档 pdf

    通过使用各种 loader,Webpack 能够处理多种类型的资源,包括但不限于 CommonJS、AMD、ES6 模块、CSS、图片、JSON、CoffeeScript 和 LESS。 #### Webpack 的核心概念 - **入口起点(Entry Points)**:定义了一个...

    webpack使用介绍

    Webpack是一个当前非常流行的前端资源模块化管理和打包...从Webpack的基本使用到高级配置,再到最佳实践,开发者可以通过阅读官方文档、参加社区讨论、阅读开源项目代码等方式,不断提高自己使用Webpack的技能水平。

    webpack实例代码

    Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它在开发环境中将各种资源如JavaScript、CSS、图片等视为“模块”,并将...同时,结合博客文章,我们可以获取更多关于Webpack使用的理论知识和实践技巧。

    使用webpack4 + vue2 从零开始创建的 TodoList 前端项目

    其四、Webpack 使用 vue-loader 打包 vue 文件,浏览器成功打开 .js 和 .vue 文件; 其五、其它 loader的用法(如:打包图片、打包 CSS 文件、打包 stylus 文件); 其六、使用 html-webpack-plugin、clean-webpack-...

    reactive-meli:Webpack使用演示应用程序

    **标题解析:** "reactive-meli:Webpack 使用演示应用程序" 指示这是一个使用 Webpack 的项目,目的是展示如何在实际应用中配置和利用 Webpack。"reactive-meli" 可能是项目的名字,暗示它可能与响应式设计或者实时...

    webpack的ESM实现

    Webpack 支持使用`import()`表达式进行异步加载模块,这在优化代码体积和提高加载速度方面非常有效。动态导入的模块将被打包成单独的chunk,只有在需要时才会被加载。 最后,Webpack 提供的热模块替换(HMR, Hot ...

    webpack基础案例.webpack单独提取css,html

    这个过程中,Webpack 使用loaders(加载器)对不同类型的文件进行预处理,而plugins(插件)则可以执行更复杂的任务,如优化、打包和生成额外的文件。 针对CSS的处理,Webpack 提供了`style-loader`和`css-loader`...

    Webpack插件来检测未使用的文件和使用的文件中未使用的导出

    在这个主题中,我们将深入探讨如何利用Webpack插件来检测未使用的文件以及在已使用的文件中查找未使用的导出。 首先,Webpack 插件是扩展Webpack功能的关键组成部分,它们通过在Webpack构建生命周期中的不同阶段...

    一套专为前端开发者准备的基于webpack36vue的开源前端框架

    3. **加载器(Loaders)**:Webpack 使用加载器来处理不同类型的文件,如Babel Loader用于转换ES6语法,Vue Loader用于解析Vue组件。 4. **插件(Plugins)**:Webpack 插件可以扩展其功能,如UglifyJSPlugin用于...

Global site tag (gtag.js) - Google Analytics