外部引入react组件说编译,说browserify
遇到这样一个问题,在一个页面中写了一个react的组件,这是没有问题的,比如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="js/react.min.js"></script> <script src="js/react-dom.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> </head> <body> <div id="wrap"></div> <script type="text/babel"> ReactDOM.render(<div>Helloworld</div>,document.getElementById("wrap")); </script> </body> </html> 但我想在十个页面需要引用它,对于有多个页面要引用它,在每个页面中重复写是一个不明智的做法。 //helloworld.js var HelloWorld = React.createClass({ render:function(){ return(? <div>hello world</div> ) } }) ReactDOM.render(<HelloWorld />,document.getElementById("wrap")); 然后在引用它的页面中我这样写: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="js/react.min.js"></script> <script src="js/react-dom.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> </head> <body> <div id="wrap"></div> <script type="text/babel" src="helloworld.js"></script> </body> </html> 然后我在chrome浏览器中打开.html文件,浏览器没有显示任何东西。 为什么呢? 然后分析我步骤 <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> 于是在查看文档时,我发现了这样一句话: 哦,问题出在chrome浏览器,然后我果断试验了Firefox和Safari是没有问题的 那么对于chrome浏览器怎么办呢?我这里提供两种解决方案: 第一种:线下编译,参照官方的文档,链接如下 第二种: 这里使用browserify 尽管十分强大,但Browserify仅支持JavaScript文件,不像Bower,Webpack或者其他打包工具支持多种文件格式。 想要Browserify良好的运行起来,必须初始化一个node项目,假设已经安装了node和npm,你可以通过终端运行下面的命令来初始化一个项目。这个命令会创建一个含有必要资源的package.json文件。 npm init npm install –save-dev browserify react react-dom babelify babel-preset-react uglify-js 在package.json文件的末尾增加如下构建脚本,这里有一点一定要注意: “[babelify --preset [react] ]”中"[react]"前后一定都要有空格,否则要出错 … “scripts”:{ “build”:”browserify -t [babelify --preset [react]] index.js -o bundle.js”,“build-dist”:”NODE_ENV=production browserify index.js | uglifyjs -m > bundle.min.js” } 下一步,新建文件:index.html index.js index.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>引入组件</title> </head> <body> <div id="wrap"></div> <script src="bundle.js"></script> </body> </html> index.js内容: var React = require("react"); var ReactDOM = require("react-dom"); ReactDOM.render(<h1>HelloWorld</h1>,document.getElementById("wrap")); 此时文件目录为: 然后直接在命令行中输入npm run build,就会生成bundle.js. 这时的文件目录为: 打开index.html文件就可以看到页面了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |