❶ react用webpack build时怎么改变静态文件路径
react是可以用 Cookie, 当然这是 Ajax 部分的工作, React 关系不大.Session 应该只和生命周期有关, 登录状态不够用, 一般情况.
❷ 如何获取webpack打包的源文件
好吧,自己二了,在package.json的build命令前执行自定义的文件写入js就可以了。。"scripts": {"dev": "node build/create-index.js && node build/dev-server.js","build": "node build/create-index.js && node build/build.js"}
❸ webpack打包原理
webpack打包原理是根据文件间的依赖关系对其进行静态分析,然后将这些模块按指定规则生成静态资源,当 webpack 处理程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
webpack有两种组织模块的依赖方式,同步、异步。异步依赖将作为分割点,形成一个新的块;在优化了依赖树之后,每一个异步区块都将作为一个文件被打包。
webpack有一个智能解析器,几乎可以处理任何第三方库。无论它们的模块形式是CommonJS、AMD还是普通的JS文件;甚至在加载依赖的时候,允许使用动态表require("、/templates/"+name+"、jade")。
(3)webpack获取文件路径扩展阅读
在使用webpack构建的典型应用程序或站点中,有三种主要的代码类型:
1、团队编写的源码。
2、源码会依赖的任何第三方的library或"vendor"代码。
3、webpack的runtime和manifest,管理所有模块的交互。
runtime 包含:在模块交互时,连接模块所需的加载和解析逻辑;包括浏览器中的已加载模块的连接,以及懒加载模块的执行逻辑。
❹ webpack 怎样提取js文件里面的路径
jsp是比较偏html的,不怎么关心你的js文件
❺ webpack怎样配置出入口文件
//出口文件mole.exports={ //入口文件 entry:”./src/index.js”//入口文件路径}//出口文件配置output:{ path:path.resolve(__dirrname,”dist”), //打包文回件的绝对路答径 filename:”build.js” //打包的文件名 }mole: { rules: [{ test: /\.css$/, //压缩css use: ['style-loader', 'css-loader'] }, { test: /\.(png|jpg|gif|jpeg|mp4)$/,//压缩图片 use: 'file-loader' }]} (BY三人行慕课)
❻ webpack问题。。。,。。。,
webpack-dev-server有两种推荐的用法1、命令行方式。这个取决于你的webpack.config.js文件,然后调用“node_moles/.bin/webpack-dev-server”2、npm script的方式。可能你文件路径或者调用命令行写法有误吧
❼ 为什么用webpack 生成html
需求来看下我们的需求:使用webpack-dev-server做开发时的服务器在webpack-dev-server里使用路由,访问/a时候显示a.html,/b显示b.html打包成多个html,给其中引用到资源加md5戳主要目录结构├——src│└——views#每一个文件夹对应一个页面│└——a│└——index.js│└——b│└——index.js├——output#打包输出的目录|└——└——template.html#将根据这个模版,生成各个页面的html└——webpack.config.js└——dev-server.js#webpack-dev-server+express只列出了主要的目录,这里我们根据一个template.html来生成多个页面的html,他们之间只有引用的资源路径不同。当然,你也可以每个页面单独使用一个html模版。Webpack配置这里主要解决两个小问题。1.打包多个页面的js文件读取src/views下的目录,约定每一个目录当成一个页面,打包成一个jschunk。2.打包多个html循环生成多个HtmlWebpackPlugin插件,把每一个插件的chunks各自指向上面打包的jschunk。//webpack.config.jsvarglob=require('glob');varwebpackConfig={/*一些webpack基础配置*/};//获取指定路径下的入口文件functiongetEntries(globPath){varfiles=glob.sync(globPath),entries={};files.forEach(function(filepath){//取倒数第二层(view下面的文件夹)做包名varsplit=filepath.split('/');varname=split[split.length-2];entries[name]='./'+filepath;});returnentries;}varentries=getEntries('src/view/**/index.js');Object.keys(entries).forEach(function(name){//每个页面生成一个entry,如果需要HotUpdate,在这里修改entrywebpackConfig.entry[name]=entries[name];//每个页面生成一个htmlvarplugin=newHtmlWebpackPlugin({//生成出来的html文件名filename:name+'.html',//每个html的模版,这里多个页面使用同一个模版template:'./template.html',//自动将引用插入htmlinject:true,//每个html引用的js模块,也可以在这里加上vendor等公用模块chunks:[name]});webpackConfig.plugins.push(plugin);})路由配置在多页应用下,我们希望访问的是localhost:8080/a,而不是localhost:8080/a.html。由于webpack-dev-server只是将文件打包在内存里,所以你没法在express里直接sendfile('output/views/a.html'),因为这个文件实际上还不存在。还好webpack提供了一个outputFileStream,用来输出其内存里的文件,我们可以利用它来做路由。注意,为了自定义路由,你可能需要引进express或koa之类的库,然后将webpack-dev-server作为中间件处理。//dev-server.jsvarexpress=require('express')varwebpack=require('webpack')varwebpackConfig=require('./webpack.config')varapp=express();//webpack编译器varcompiler=webpack(webpackConfig);//webpack-dev-server中间件vardevMiddleware=require('webpack-dev-middleware')(compiler,{publicPath:webpackConfig.output.publicPath,stats:{colors:true,chunks:false}});app.use(devMiddleware)//路由app.get('/:viewname?',function(req,res,next){varviewname=req.params.viewname?req.params.viewname+'.html':'index.html';varfilepath=path.join(compiler.outputPath,viewname);//使用webpack提供的outputFileSystemcompiler.outputFileSystem.readFile(filepath,function(err,result){if(err){//somethingerrorreturnnext(err);}res.set('content-type','text/html');res.send(result);res.end();});});mole.exports=app.listen(8080,function(err){if(err){//dosomethingreturn;}console.log('Listeningatpackage.json{scripts:{"dev":"node./dev-server.js"}}运行npmrundev,然后在浏览器访问localhost:8080/各个页面,你应该可以看到想要的结果。
❽ 如何解决webpack打包的文件体积过大的问题
去除不必要的插件刚开始用 webpack 的时候,开发环境和生产环境用的是同一个 webpack 配置文件,导致生产环境打包的 JS 文件包含了一大堆没必要的插件,比如 HotMoleReplacementPlugin, NoErrorsPlugin… 这时候不管用什么优化方式,都没多大效果。所以,如果你打包后的文件非常大的话,先检查下是不是包含了这些插件。提取第三方库像 react 这个库的核心代码就有 627 KB,这样和我们的源代码放在一起打包,体积肯定会很大。所以可以在 webpack 中设置{entry: {bundle: 'app'vendor: ['react']}plugins: {new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')}}这样打包之后就会多出一个 vendor.js 文件,之后在引入我们自己的代码之前,都要先引入这个文件。比如在 index.html 中<script src="/build/vendor.js"></script><script src="/build/bundle.js"></script>除了这种方式之外,还可以通过引用外部文件的方式引入第三方库,比如像下面的配置{externals: {'react': 'React'}}externals 对象的 key 是给 require 时用的,比如 require('react'),对象的 value 表示的是如何在 global 中访问到该对象,这里是 window.React。这时候 index.html 就变成下面这样<script src="//cdn.bootcss.com/react/0.14.7/react.min.js"></script><script src="/build/bundle.js"></script>当然,个人更推荐第一种方式。代码压缩webpack 自带了一个压缩插件 UglifyJsPlugin,只需要在配置文件中引入即可。{plugins: [new webpack.optimize.UglifyJsPlugin({compress: {warnings: false}})]}加入了这个插件之后,编译的速度会明显变慢,所以一般只在生产环境启用。另外,服务器端还可以开启 gzip 压缩,优化的效果更明显。代码分割什么是代码分割呢?我们知道,一般加载一个网页都会把全部的 js 代码都加载下来。但是对于 web app 来说,我们更想要的是只加载当前 UI 的代码,没有点击的部分不加载。看起来好像挺麻烦,但是通过 webpack 的 code split 以及配合 react router 就可以方便实现。具体的例子可以看下 react router 的官方示例 huge apps。不过这里还是讲下之前配置踩过的坑。code split 是不支持 ES6 的模块系统的,所以在导入和导出的时候千万要注意,特别是导出。如果你导出组件的时候用 ES6 的方式,这时候不管导入是用 CommomJs 还是 AMD,都会失败,而且还不会报错!当然会踩到这个坑也是因为我刚刚才用 NodeJS,而且一入门就是用 ES6 的风格。除了这个之外,还有一点也要注意,在生产环境的 webpack 配置文件中,要加上 publicPathoutput: {path: xxx,publicPath: yyy,filename: 'bundle.js'}不然的话,webpack 在加载 chunk 的时候,路径会出错。设置缓存开始这个小节之前,可以先看下大神的一篇文章:大公司里怎样开发和部署前端代码。对于静态文件,第一次获取之后,文件内容没改变的话,浏览器直接读取缓存文件即可。那如果缓存设置过长,文件要更新怎么办呢?嗯,以文件内容的 MD5 作为文件名就是一个不错的解决方案。来看下用 webpack 应该怎样实现output: {path: xxx,publicPath: yyy,filename: '[name]-[chunkhash:6].js'}打包后的文件名加入了 hash 值const bundler = webpack(config)bundler.run((err, stats) => {let assets = stats.toJson().assetslet namefor (let i = 0; i < assets.length; i++) {if (assets[i].name.startsWith('main')) {name = assets[i].namebreak}}fs.stat(config.buildTemplatePath, (err, stats) => {if (err) {fs.mkdirSync(config.buildTemplatePath)}writeTemplate(name)})})手动调用 webpack 的 API,获取打包后的文件名,通过 writeTemplate 更新 html 代码。完整代码猛戳 gitst。
❾ webpack server 怎么静态资源路径
第一步: 先获得classpath路径1String classpath = this.getClass().getResource("/").getPath().replaceFirst("/", "");这样子可以得到classpath路径,类似于:F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/WEB-INF/classes/然后把WEB-INF/classes截取就能获得WebAPP目录啦:1String webappRoot = classpath.replaceAll("WEB-INF/classes/", "");得到的结果就是:F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/通过这个路径你就能获取该文件夹下的所有文件啦
❿ webpack 打包html文件,html中标签的style里的图片路径不被处理。
使用-webpack-plugin插件将图片复制到dist/images目录