如何使用 webpack 从 React JS 中的外部 JS 文件导入对象

Posted

技术标签:

【中文标题】如何使用 webpack 从 React JS 中的外部 JS 文件导入对象【英文标题】:How import object from external JS file in React JS using web pack 【发布时间】:2017-01-04 04:39:52 【问题描述】:

我正在建立我对 React JS 的了解,我想导入/包含一些外部 JS 文件,这些文件只包含一个对象/对象数组。我已经在 jQuery、Vanilla JS 甚至 Angular JS 中完成了这项工作。甜的!!!

如何在 React JS 中实现同样的功能。

我的 index.html 有以下内容:

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Hello React</title>
    </head>
    <body>
        <div id="hello"></div>
        <div id="world"></div>

        <div id="caseListing"></div>

        <script src="js/bundle.js"></script>
    </body>
</html>

和我的main.js(入口文件)如下:

import Hello from './jsx/hello.jsx';
import World from './jsx/world.jsx';

var $ = require('./lib/jquery.js');
window.jQuery = $;
window.$ = $;

var Jobs = require('./data/jobs.js');
console.log('Jobs:', Jobs);

在这里,我有 Jobs.js:

var Jobs = (function () 
    "use strict";
    return 
        "jobs": [
            
                "jobType": "Web developer",
                "desc": "Creates website"
            ,
            
                "jobType": "Bin Man",
                "desc": "Collects bins"
            
        ]
    ;
());

为了更好的衡量,我的 webpack.config.js 看起来像这样:

var path = require('path');
var webpack = require('webpack');

module.exports = 
    entry: [
        './js/main.js'
    ],
    output: 
        path: __dirname,
        filename: 'js/bundle.js'
    ,
    module: 
        loaders: [
            
                test: /.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: 
                    presets: [
                        'es2015',
                        'react'
                    ]
                
            
        ]
    
;

所有帮助将不胜感激。 :)

【问题讨论】:

【参考方案1】:

您需要从 jobs.js 中导出 Jobs 才能将其导入另一个模块。如果你只是导出静态数据,jobs.js 不需要是一个函数。所以,你可以让 jobs.js 看起来像这样:

export default 
    jobs: [
        
            jobType: "Web developer",
            desc: "Creates website"
        ,
        
            jobType: "Bin Man",
            desc: "Collects bins"
        
    ]
;

然后你可以像这样导入它:

import Jobs from './data/jobs.js';

或者:

var Jobs = require('./data/jobs.js').default;

如果你想使用普通的 commonjs 语法,那么你可以像这样制作 jobs.js:

module.exports = 
    jobs: [
        
            jobType: "Web developer",
            desc: "Creates website"
        ,
        
            jobType: "Bin Man",
            desc: "Collects bins"
        
    ]
;

这允许您这样要求:

var Jobs = require('./data/jobs.js');    

【讨论】:

如果文件包含一些声明的变量并且函数也使用这些变量怎么办?你能举个例子吗? 如果我的 jobs.js 是第三方应用程序自动生成的文件,我无法控制怎么办? (即不能将 module.exports 添加到它)【参考方案2】:

假设您保存数据的文件名为“file.js”。

var text = "Hello world!"; //In file.js

在这一行下面,你必须导出这个变量,以便它可以在 React 代码中导入:

module.exports = data: text //In file.js

字符串存储为称为“数据”的对象。 然后将“file.js”的内容导入您希望使用的文件中,比如 App.jsx”。

import file from './file.js'; //In App.jsx

您在另一个文件中导出的对象的内容在此处存储为变量“文件”。然后您可以将“文件”的内容转换为对象:

var str = file.data; //"data" is the object within "file"

您的字符串“Hello world!”现在存储在变量 str 中。

希望这会有所帮助!

【讨论】:

如果我的 file.js 是我无法控制的第三方应用程序自动生成的文件怎么办? (即不能将 module.exports 添加到它)

以上是关于如何使用 webpack 从 React JS 中的外部 JS 文件导入对象的主要内容,如果未能解决你的问题,请参考以下文章

react js上的样式导入(使用webpack)

Webpack2,如何从构建中排除 react 和 react dom

如何在 Webpack 构建过程中将 React 应用程序中的 mockServiceWorker.js 文件复制到我的构建文件夹

如何从我的 Android 代码在 web 视图中运行 React JS 函数?

如何编辑 webpack 以在 React 应用程序中使用 SCSS?

webpack.config.js 如何在 react 项目中工作?