You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var_ref=_asyncToGenerator(regeneratorRuntime.mark(function_callee(ctx,next){^
ReferenceError: regeneratorRuntimeisnotdefined
at D:\luoo\nodejs\babel\routes\index-koa2.js:79:38atroute(D:\luoo\nodejs\babel\routes\index-koa2.js:140:6)atObject.<anonymous>(D:\luoo\nodejs\babel\server.js:79:31)atModule._compile(module.js:541:32)atObject.Module._extensions..js(module.js:550:10)atModule.load(module.js:458:32)attryModuleLoad(module.js:417:12)atFunction.Module._load(module.js:409:3)atFunction.Module.runMain(module.js:575:10)atstartup(node.js:160:18)atnode.js:449:3
基础文章
css in js选型问题
css-modules
基于webpack,几乎等同传统
css
样式,也可以使用less sass
,css样式在组件中使用后会在页面自动加载.在做服务器端渲染的时候需要使用css-modules-require-hook,这个库能让
node.js
识别css文件且同步你的自定义hash类名(但也就只是获取类名让前后端渲染类名一致,具体的样式还是需要等待javascript
进行加载插入教程可以参考阮一峰老师的文章
csjs
css in js
,库比较轻便,功能也比较简单,但每个class
都会hash重命名,不能定于"静态全局类名",css样式可自定义获取加载j2c
css in js
,功能比较强大,拥有类似less sass
的层叠样式编辑,继承,hash类名(hash后类名会带有j2c标识且较长
),全局静态类名,css样式可以自定义获取加载.但在做服务器端渲染的时候和组件引用同一份样式文件生成出来的类名却不同(hash值不同),暂时没有好的解决方法
使用原生JavaScript
示例代码:
配合insert-css github可以把
css
代码插入到<head>
中使用这种方法优势也很明显,不依赖第三方库,简单直接方便,开发过程中可以用
css
调试完后直接把css
代码直接复制到let styles = ```封装,如果想实现hash值类名可以配合
csjs`库来实现,原生样式用于全局样式定义,示例如下:各种css in js库传送门
extract-text-webpack-plugin
extract-text-webpack-plugin
基于
webpack
打包css文件,可以搭配css-modules
使用,使用后css-modules
将不会自动插入css代码,需要手动加载示例如下:
因为使用
extract-text-webpack-plugin
生成的文件可能需要带有'hash',所以在获取文件路径的时候无法静态获取,可以使用assets-webpack-plugin
assets-webpack-plugin
assets-webpack-plugin
基于
webpack
进行打包文件时,使用assets-webpack-plugin
能获取记载的css js
等文件使用
extract-text-webpack-plugin
的示例进行扩展:webpack-isomorphic-tools
webpack-isomorphic-tools
引用别人的原话就是:
React-router路径问题
单考虑前端的话可以使用
hashHistory
来做,路径样式如下但如果要考虑同构就需要用
browserHistory
来代替,路径的样式如下引用别人的原话
使用
browserHistory
后因为用到HTML5所以会有兼容问题.如果使用
hashHistory
想要去除?_k=9d95p3
这个hash值可以使用外部的history库, 参考代码:其他同构文章可以参考:
同构按需加载
require.ensure()
基于
webpack + react-router
使用require.ensure
,参考代码如下:require.ensure()
会按照代码生成文件,以上代码require.ensure()
会生成两份文件,分别是essay.js, posts.js
最后的字符串(essay, posts)指的就是webpack.config.js
中chunkFilename
中的[name].js
因为
require.ensure()
是基于webpack
所以在node.js
是找不到这个方法的,所以在同构的时候需要自行判断服务端与前端分别的加载方法.如果是服务端时则使用正常的require()
,前端则使用require.ensure()
.提供一下方法判断:
!!注意!!
require.ensure()
方法中的'require()'方法不能使用变量传递路径, 必须使用字符串否则会出错!bundle-loader
除了上面的
require.ensure()
还有另一种类似的方法,就是bundle-loader
,介绍可以去官方文档查看,具体用法:require前加上
bundle?lazy
表示这个组件需要进行异步加载,&name=essay
表示生成chunk的名称加载
bundle?lazy
之后的组件返回的并不是组件本身而是bundle
函数,需要像上面再调用这个函数才能获取组件另外可以不用每次调用
require()
都加上bundle?lazy
,在webpack.config.js
设置loader
可以指定匹配文件都使用异步方法加载, 可以参考Implicit Code Splitting and Chunk Loading with React Router and Webpackwebpack热加载
node.js + express
可以使用webpack-dev-middlewarenode.js + koaV2
可以使用koa-webpack-middleware(官方推荐方法),按照官方示例测试后,发现使用会页面无法正常显示,会自动进行下载,推测是header设置问题?具体暂时没有深入研究.转而使用koa-webpack-dev-middleware + koa-webpack-hot-middleware,使用方法与上面的基本一致,库语法使用
koaV1
,可以使用koa-convert封装使用参考文章:
Babel解析问题
babel
命令放到package.json
里面出错可以先更新
babel
相关库非全局执行的
babel
命令需要添加.babelrc
文件具体配置:
默认解析出来的文件对
export default {}
支出不好导致不能正常require()
加载,可以使用babel-plugin-add-module-exports来解决使用
koa + node.js
搭建的服务器解析后出现以下错误:这里引用阮一峰老师原话:
最终配置:
.babelrc
package.json
参考文章:
The text was updated successfully, but these errors were encountered: