当前位置: 首页 > news >正文

免费网站软件大全全网网站建设优化

免费网站软件大全,全网网站建设优化,wordpress 互动性,短视频商业模式搭建在开发react单页面的时候无可避免的要使用到webpack打包#xff0c;今天就从零开始搭建一个react的开发环境。 需要实现的功能有#xff1a; 使用Babel编译ES6编译.jsx文件实现热更新编译CSS预处理文件Less#xff0c;CSS后处理文件PostCSS提取公共的CSS样式到一个公共的文…在开发react单页面的时候无可避免的要使用到webpack打包今天就从零开始搭建一个react的开发环境。 需要实现的功能有 使用Babel编译ES6编译.jsx文件实现热更新编译CSS预处理文件LessCSS后处理文件PostCSS提取公共的CSS样式到一个公共的文件中压缩js减小js文件的大小抽取公共的第三方js库并且打包的时候第三方js文件的名称不会变方便客户端缓存压缩img等资源文件过小的资源文件就编程dataURL的形式直接写在CSS中可以访问静态的资源文件图片等代理 一、完成基本的目录结构与基本打包 新建一个reactWebpack文件夹进入该文件夹并执行 npm init 初始化一个项目生成package.json文件新建如下目录结构 reactWebpack -- dist(打包后文件) -- src(业务源码)|-- index.html|-- app.js -- webpack.config.js(webpack配置文件) -- .babelrc(babel配置文件) -- package.json在reactWebpack文件夹下安装以下依赖 npm install -D webpack3.11.0 如果全局环境下没有webpack那么建议也全局安装 npm install -g webpack3.11.0 修改webpack的配置文件 webpack.config.js 如下 var path require(path);module.exports {entry: ./src/index.js,output: {path: path.resolve(__dirname, dist), // 这里需要绝对路径filename: [name].js} }到这一步就可以使用webpack打包项目中依赖的js了但是使用jsx和目前浏览器还不能完美支持的ES6语法还需要转译将ES6等新的特性和jsx转换成ES5语法让浏览器不支持的特性得以支持。 安装依赖 npm install babel-core babel-loader babel-preset-react babel-preset-2015 修改webpck.config.js加上对js文件处理的loader部分 var path require(path);module.exports {entry: ./src/index.js,output: {path: path.resolve(__dirname, dist),filename: [name].js},module: {rules: [{test: /\.js|\.jsx$/, use: [babel-loader], exclude: path.resolve(__dirname, node_modules)}]} }修改babel配置文件.babelrc文件 {presets: [es2015, react] }配置打包html模板先安装依赖 npm install -D html-webpack-plugin 修改webpack.config.js文件如下 var path require(path); var HtmlWebpackPlugin require(html-webpack-plugin);module.exports {entry: ./src/index.js,output: {path: path.resolve(__dirname, dist),filename: [name].js},module: {rules: [{test: /\.js$/, use: babel-loader, exclude: path.resolve(__dirname, node_modules/)} ]},plugins: [new HtmlWebpackPlugin({template: ./src/index.html,filename: index.html,inject: true})] }安装项目依赖react等 npm install --save react react-dom react-router-dom 修改index.html和app.js文件 index.html 如下 !DOCTYPE html html headmeta charsetutf-8 /title/title /head body div idcontainer/div /body /html app.js 如下 import ReactDOM from react-dom import React from reactReactDOM.render(div我是组建/div, document.getElementById(container)) 到这里基本的目录结构已经搭建完成并且可以在根目录下执行webpack进行打包。打包完成后在dist文件夹下会有index.html和app.js文件。 二、配置webpack热加载 安装如下依赖 npm install -D webpack-dev-server2.7.1 注意是2.7.1版本在根目录下添加 dev.conf.js 文件 var webpack require(webpack) var WebpackDevServer require(webpack-dev-server)var config require(./webpack.config.js) var port 8899 var host localhost var options {contentBase: ./dist,hot: true,host: host,port: port // 这里最好加上port }WebpackDevServer.addDevServerEntrypoints(config, options) var compiler webpack(config) var server new WebpackDevServer(compiler, options)server.listen(port, function(){console.log(host : port 启动成功) })修改webpack.config.js文件添加了两个插件 var path require(path) var webpack require(webpack) var HtmlWebpackPlugin require(html-webpack-plugin)module.exports {entry: ./src/app.js,output: {path: path.resolve(__dirname, dist),filename: [name].js},devtool: inline-source-map, // 生成map映射方便定位错误module: {rules: [{test: /\.js$/, loader: babel-loader }]},plugins: [ new webpack.NamedModulesPlugin(), // 新加new webpack.HotModuleReplacementPlugin(), // 新加new HtmlWebpackPlugin({template: ./src/index.html,path: path.resolve(__dirname, dist),chunks: [main]})] } 到这里开发环境配置完成在根目录下运行 node dev.conf.js 即可启动一个开发服务器。 三、调整目录结构 在上面已经完成可webpak开发环境的配置下面要配置打包环境。在开始配置打包环境之前需要调整一下目录的结构。因为在开发环境dev和打包build上线的环境有一部分不同但是基础部分又是相同的所以需要合理的计划一下。 主要分为三个配置文件 dev.conf.js原webpack.config.js一部分内容、build.conf.js和base.conf.js原大部分webpack.config.js内容这三个文件会被放在新建的build文件夹下。 调整后的文件目录如下 reactWebpack--build|--base.conf.js|--dev.conf.js|--build.conf.js-- dist(打包后文件)-- src(业务源码)|-- index.html|-- app.js-- .babelrc(babel配置文件)-- package.json 修改base.conf.js文件如下 var path require(path) var webpack require(webpack) var HtmlWebpackPlugin require(html-webpack-plugin)function resolve(dir){return path.resolve(__dirname, ../, dir) }module.exports {entry: ./src/app.js,output: {path: resolve(dist),filename: [name].js},devtool: inline-source-map,module: {rules: [{test: /\.js$/, loader: babel-loader,exclude: resolve(node_modules)}]},plugins: [ new HtmlWebpackPlugin({template: ./src/index.html,path: resolve(dist),chunks: [main]})] }安装依赖 npm install -D webpack-merge并修改dev.conf.js文件如下 var webpack require(webpack) var WebpackDevServer require(webpack-dev-server) var merge require(webpack-merge)// 开发环境配置这部分配置在打包的时候是不需要的 var webpackDevConfig {plugins: [new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin()] }// 下面是服务器配置 var config merge(webpackDevConfig, require(./base.conf.js)) var options {contentBase: ../dist,hot: true,host: localhost } var port 8899WebpackDevServer.addDevServerEntrypoints(config, options) var compiler webpack(config) var server new WebpackDevServer(compiler, options)server.listen(port, function(){console.log(启动成功) }) 上面的目录结构已经调整完成在根目录下运行 node build/dev.conf.js 即可开启开发服务器。 四、配置完善的webpack打包部分 webpack是按照依赖打包的但是如果不处理的话所有的依赖会被打包到一个文件中也就是说无论是第三方依赖还是自己写的业务逻辑都会在同一个打包好的文件main.js中。 这会有很多问题例如 不方便客户端缓存客户端肯定会缓存main.js但是如果我们修改了业务代码然后打包上线这个main.js名称没有改变而内容却是修改了并且客户端缓存了main.js所以不一定会去获取新的main.js这样就导致了新的代码并没有及时的被使用没有将第三方代码和业务代码分离分离后第三方代码是可以让客户端缓存以节省加载时间因为我们修改的是自己的业务代码上面的配置还没有去除注释、警告和压缩代码以减小代码体积 压缩代码JS代码 修改build.conf.js文件如下 var path require(path) var webpack require(webpack) var merge require(webpack-merge) var baseConfig require(./base.conf.js)var buildConfig {plugins: [new webpack.DefinePlugin({process.env: {NODE_ENV: JSON.stringify(production)}}),new webpack.optimize.UglifyJsPlugin() // 新加] }module.exports merge(buildConfig, baseConfig) 在根目录下执行webpack build/build.conf.js即可看到打包出的文件会小很多。 提取第三方代码单独打包 修改代码如下 var path require(path) var webpack require(webpack) var merge require(webpack-merge) var baseConfig require(./base.conf.js)var buildConfig {plugins: [new webpack.DefinePlugin({process.env: {NODE_ENV: JSON.stringify(production)}}),new webpack.optimize.CommonsChunkPlugin({name: vender, // 指定公共 bundle 的名称minChunks: function (module, count) {console.log(count)return (module.resource /\.js$/.test(module.resource) module.resource.indexOf(path.join(__dirname, ../node_modules)) 0)}}),new webpack.optimize.CommonsChunkPlugin({name: manifest, // 提取webpack的运行时代码chunks: [vender]}),new webpack.optimize.UglifyJsPlugin()] }module.exports merge(buildConfig, baseConfig)为文件名添加hash当修改的时候文件名发生变化让客户端及时获取变化的文件同时缓存没有改变的文件。 修改base.conf.js文件如下 var path require(path) var webpack require(webpack) var HtmlWebpackPlugin require(html-webpack-plugin)function resolve(dir){return path.resolve(__dirname, ../, dir) }module.exports {entry: ./src/app.js,output: {path: resolve(dist),filename: [name]-[chunkHash].js // 新加 chunkHash内容改变的时候chunkHash才会改变},devtool: inline-source-map,module: {rules: [{test: /\.js$/, loader: babel-loader,exclude: resolve(node_modules)}]},plugins: [ new HtmlWebpackPlugin({template: ./src/index.html,path: resolve(dist),chunks: [main]})] }因为加上了chunkHash新生成的文件不会覆盖老文件那么就会产生很多文件并不能立马找到目标文件。这时可以考虑先清空打包的目标文件夹dist 安装 npm install -D clean-webpack-plugin 修改 build/build.conf.js文件如下 var path require(path) var webpack require(webpack) var merge require(webpack-merge) var baseConfig require(./base.conf.js) var Clean require(clean-webpack-plugin)var buildConfig {plugins: [new webpack.DefinePlugin({process.env: {NODE_ENV: JSON.stringify(production)}}),new webpack.optimize.CommonsChunkPlugin({name: vender, // 指定公共 bundle 的名称minChunks: function (module, count) {console.log(count)return (module.resource /\.js$/.test(module.resource) module.resource.indexOf(path.join(__dirname, ../node_modules)) 0)}}),new webpack.optimize.CommonsChunkPlugin({name: manifest,chunks: [vender]}),new webpack.optimize.UglifyJsPlugin(),new Clean([dist]) // 新加] }module.exports merge(buildConfig, baseConfig) 待续。。。。。。。。。。。。。。。。。。。。。。。。。。。 后续1.CSS预处理器和后处理器的编译 2. 图片的加载 5. 跨域代理的配置 6. 依据react-router做代码分割 参考 ​ webpack中文文档 ​ vue-cli生成的webpack配置文件
http://www.huolong8.cn/news/57786/

相关文章:

  • 免费网站模板库专业建站服务公司
  • 创业 建网站网站 开发
  • 自己建设外贸网站网站站内文章互联
  • 电视台视频网站建设方案茶网站建设宗旨
  • 北湖建设局网站网站怎么做微信送红包活动
  • 九年级上册信息技术做网站建立网站建设
  • 威海网站设计公司招商网代理
  • 自己怎么建立自己的国际网站网站开发名词解释
  • 唐山做网站汉狮网络泉港网站建设推广服务公司
  • 网站建设的申请网站备案和备案的区别
  • 深圳网站建设服务温州网站外包
  • 网站建设写代码自己怎么创业惠州网站制作
  • 企业网站设计风格网站型销售怎么做
  • 做一元购物网站网站上的销售怎么做
  • 开发网站广州画册什么网站做方便
  • metro风格网站商标免费设计在线生成
  • 网站开发容易吗网络营销推广网站收录
  • 购物网站怎么做项目简介html简单的个人网页代码
  • 网站生成器怎么做网站怎么做数据分析
  • 网站上传后怎么打开野花香社区在线观看播放
  • 松岗专业做网站公司施工企业账务处理
  • 网站上传文件存储方式产品营销策略包括哪些内容
  • 学习html的网站百度网站排名怎么做
  • 企业网站seo托管怎么做石家庄优化
  • 哪些网站可以做h5外贸建站模板免费
  • 上海传媒公司总裁是谁百度关键词优化和百度推广
  • 家装网站网站专题建设
  • 手机访问wordpress网站卡全网维护
  • 北京网站设计首选 新鸿儒求大神帮忙做网站
  • 亚马逊网站建设与维护方法分析东莞网站建设推广技巧