我正在尝试使用webpack安装React。它是Rails项目的一部分。我正在关注this tutorial使用webpack安装React时未定义
本教程建议从app/assets/javascripts(我还没有完成 - 我仍然有jquery,jquery_ujs和d3)中删除所有内容,将我的javascript放到一个单独的目录中,我的'源',然后在我的webpack配置中将app/assets/javascripts作为'目标'目录。我已经按照教程命名了我的源代码目录app/frontend/javascripts。
这是我的webpack.config.js文件看起来是这样的:
'use strict';
var path = require('path');
var webpack = require('webpack');
module.exports = [{
name: 'chartComponent',
entry: './app/frontend/javascripts/entry.js',
output: {
path: path.join(__dirname, 'app', 'assets', 'javascripts'),
filename: 'bundle.js'
},
module: {
loaders: [
{
test: [/\.jsx$/],
loaders: ["jsx-loader?insertPragma=React.DOM&harmony"],
}
],
},
resolve: {
extensions: ['.webpack.js', '.web.js', '.js', '.jsx']
}
}];
我承认,我不知道所有这些设置做的,特别是“装载机”的设置,但它是我的理解是“条目'应该指向我的webpack-javascript javascript的入口点,'output'应该为编译的javascript指定目录和文件名。
我已经指定文件'app/frontend/javascripts/entry.js'作为我的入口点。该文件是这样的:
var React = require('react');
var ReactDOM = require('react-dom');
var Chart = require('react-d3-core').Chart;
var LineChart = require('react-d3-basic').LineChart;
的WebPack运行正常,并生成文件“应用程序/资产/ Java脚本/ bundle.js”,符合市场预期。然而,当我在我的Rails应用程序或我的Jasmine测试中包含软件包文件时,全局变量React,ReactDOM等不可用。在控制台,尝试访问反应过来,我得到:
Uncaught ReferenceError: React is not defined
我可以成功访问全局变量d3
和$
分别由d3.js和jquery.js和设置,但我不管理这些通过的WebPack。
我想我一定是错误的期望在我的webpack条目文件中设置的变量可用。此外,似乎应该在包含文件中设置这样的变量,而不是由我声明 - 就像d3
和$
的设置没有我声明和设置它们的值。但是,当我看着bundle.js时,我确实看到了var React = ....
。 (在不止一个地方,我不明白,但无论如何)。所以我会认为这个变量至少会被定义。
简而言之,如何从我的应用程序和测试中访问React(或包含在webpack中的任何其他库)?任何帮助感谢!
我的猜测是反应没有安装。你有没有在某个时候输入'npm install --save react'? (或者''react'出现在你的package.json依赖关系中?) – Daniel
即使你没有明确地调用'React',你也需要在你的jsx文件中从'react''导入React。 jsx会被编译成react的api。 –
@Daniel我安装了反应 - 当我运行'npm view react version'时,我得到了15.4.2。这也是我的package.json文件在“依赖关系”下的版本号 –