随着大前端的来临,须要前端处理愈来愈多的事情,不只局限页面的交互,项目的需求愈来愈多,更多的逻辑须要在前端完成,为了简化开发的复杂度,前端社区涌现出了不少好的实践方法。javascript
这些改进确实大大的提升了咱们的开发效率,可是利用它们开发的文件每每须要进行额外的处理才能让浏览器识别,而手动处理又是很是繁琐的,这就为webPack类的工具的出现提供了需求。css
webpack是一个模块打包工具,它能够将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还能够将按需加载的模块进行代码分割,等到实际须要的时候再异步加载。html
把项目当作一个总体,经过一个给定的主文件(如:index.js),从这个文件开始找到你的项目的全部依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。前端
npm install -g webpack
mkdir webpack_pratice
进入到webpack_pratice,建立package.json文件,在终端中使用npm init命令能够自动建立这个package.json文件java
npm init
输入这个命令后,终端会问你一系列诸如项目名称,项目描述,做者等信息,不过不用担忧,若是你不许备在npm中发布你的模块,这些问题的答案都不重要,回车默认便可。
package.json是一个标准的npm说明文件,里面蕴含了丰富的信息,包括当前项目的依赖模块,自定义的脚本任务等等。node
npm install webpack webpack-cli --save-dev npm install typescript ts-loader --save-dev npm install style-loade node-sass sass-loader css-loader --save-dev npm install extract-text-webpack-plugin@next --save-dev npm install html-webpack-plugin --save-dev
注意:extract-text-webpack-plugin 最新版本为 3.0.2,这个版本尚未适应 webpack 4 的版本,因此安装的时候须要extract-text-webpack-plugin@nextwebpack
index.htmlgit
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>webpack测试</title> </head> <body> <div class="test-block"> Webpack </div> </body> </html>
main.tsgithub
import './main.scss' class TestMain { name: string; age: number; constructor ( name: string, age: number ) { this.name = name; this.age = age; }; testFun() { console.log(this.name + '---' + this.age) } } let testMain = new TestMain("Miss D", 18); testMain.testFun();
common.scssweb
html,body{ margin: 0; padding: 0; font-size: 25px; color: yellow; }
main.scss
@import "common.scss"; .test-block{ width: 300px; height: 300px; margin: 0 auto; background: green; }
{ "compilerOptions": { "module": "commonjs", "target": "es5", "sourceMap": true }, "exclude": [ "node_modules" ] }
const path = require('path'); const htmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { entry: './src/main.ts', //模块的入口 output: { //输出配置 filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }, module: { //资源模块的处理器 rules: [ { test: /\.tsx?$/, use: 'ts-loader', exclude: path.resolve(__dirname, 'node_modules'), include: path.resolve(__dirname, 'src'), }, { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: { loader: "style-loader" }, use: [ { loader: "css-loader", }, { loader: "sass-loader" } ] }) }] }, plugins: [ //插件配置 new ExtractTextPlugin({ filename: "[name].min.css" }), new htmlWebpackPlugin({ template: './src/index.html', inject: 'head' }) ] }
{ "name": "webpack-pratice", "version": "1.0.0", "description": "", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack --config webpack.config.js" }, "author": "", "license": "ISC", "devDependencies": { "html-webpack-plugin": "^3.2.0", "css-loader": "^2.1.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", "node-sass": "^4.11.0", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "ts-loader": "^5.3.3", "typescript": "^3.3.3333", "webpack": "^4.29.6", "webpack-cli": "^3.2.3" } }
npm run build
打包结果
项目的scss样式和typescript文件,解析成浏览器能识别的css和javascript文件,且自动引入到index.html文件中。
若是使用webpack,style-loader出现的错误:
ERROR in {project}/node_modules/style-loader/lib/addStyles.js Module not found: Error: Can't resolve './urls' in '{project}\node_modules\style-loader\lib'
解决方法: 直接修改{project}/node_modules/style-loader/lib/addStyles.js文件: 把require(“./urls”)改成require(“./urls.js”)