多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
优化webpack index.js -o dist/bundle.js 这一句其实是可以写在一个配置文件里 #### 1.**webpack.config.js** ``` const path = require('path'); module.exports = { entry: path.join(__dirname, './index.js'), output: { path: path.join(__dirname, './dist'), filename: 'bundle.js' } } ``` #### 2.在package.json文件下 ``` "scripts": { "start": "webpack --config webpack.config.js" } ``` #### 3.热加载 ``` npm install webpack-dev-server -D ``` 4.在package.json文件下 ``` "scripts": { "dev": "webpack-dev-server --config webpack.config.js --open --port 3002 --hot" } // --open 自动打开浏览器 // --port 服务监听的端口 3002 // --hot 自动更新 ``` 5.小小修改index.html ``` <script src="./bundle.js"></script>或者<script src="/bundle.js"></script> ``` 6.默认index.html ``` npm install html-webpack-plugin -D ``` 7.在**webpack.config.js** ``` const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: path.join(__dirname, './index.js'), output: { path: path.join(__dirname, './dist'), filename: 'bundle.js' }, plugins: [ new HtmlWebpackPlugin({ template: path.join(__dirname, './index.html'), filename: 'index.html' }) ] } ``` #### 注意 删掉index.html文件里面的bundle.js引用,因为html-webpack-plugin会自动把打包出来的bundle自动加到我们的index.html代码里 #### 8.在src文件夹下创建index.css并编写 ``` body{ background: skyblue; } ``` #### 9在index文件夹下引入 ``` import $ from 'jquery' $('ul li:even').css({background: 'gray'}) $('ul li:odd').css({background: 'green'}) import './index.css' ``` 10.报错? ``` 安装npm install css-loader style-loader -D // css-loader的作用是将index.css文件解析为webpack能识别的模块,然后打包进bundle.js里面, 但是这样样式并未成功显示在浏览器中。 // style-loader的作用就是将打包到bundle.js中的样式绑定到浏览器上,以style标签的形式显示出来 ``` 11\. 在**webpack.config.js** ``` const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: path.join(__dirname, './index.js'), output: { path: path.join(__dirname, './dist'), filename: 'bundle.js' }, plugins: [ new HtmlWebpackPlugin({ template: path.join(__dirname, './index.html'), filename: 'index.html' }) ], module: { rules: [{ test: /.css$/, use: ['style-loader', 'css-loader'] }] } } ``` ``` 补充:引入的文件是less 安装:npm install less-loader less -D 规则: { test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } ``` #### 12.ES6 转 ES5 npm install babel-core babel-loader@7.1.5 babel-plugin-transform-runtime babel-preset-env babel-preset-stage-0 -D 13在indxe.js下 ``` class A { } function A() {} ``` #### 13配置loader,在webpack.config.js ``` {test:/\.js/,use:['babel-loader'],exclude:/node_modules/} ``` exclude表示排除掉 node\_modules下载的依赖项。这样可以加速网站开发,而且我们也只需要对我们的项目src 源文件进行编译即可。 #### 14.新增.babelrc文件 ``` { "presets":["env","stage-0"], "plugins":["transform-runtime"] } ``` npm run start(生产) 或者npm run dev(开发) ``` 编译后 \n\n var Person = function Person() {\n (0, _classCallCheck3.default)(this, Pe rson);\n};\n\nvar p = new Person();\n\n ``` 至此关于webpack的基本配置已经到这里。 解释 **babel-present-env** 仅仅包括 babel-present-2015 、2016、2017,不包括: **babel-stage-x** ,也不包括 babel-polyfill **babel-present-env** 仅仅转换 新版的语法 如:箭头函数,并不转换新版api 如:Array.include转换新版 api及抹平浏览器之间的差异(兼容ie)需要 babel-polyfill **babel-polyfill** 会污染全局,比较暴力。而 `babel-plugin-transfrom-runtime` 是哪里需要就给 哪里转换。 **babel-plugin-transform-runtime** 主要做了一下三件事: 当你使用 `generators/async` 函数时,自动引入 `babel-runtime/regenerator` (使用 regenerator 运行时而不会污染当前环境) 。 自动引入 `babel-runtime/core-js` 并映射 ES6 静态方法和内置插件(实现polyfill的功能且无全局污染, 但是实例方法无法正常使用,如 “foobar”.includes(“foo”) ) 。 移除内联的 Babel helper 并使用模块 `babel-runtime/helpers` 代替(提取babel转换语法的代 码)。