如何从我的 webpack 2 配置中创建/生成/导出文件以在我的 React 代码中使用?

Posted

技术标签:

【中文标题】如何从我的 webpack 2 配置中创建/生成/导出文件以在我的 React 代码中使用?【英文标题】:How to create/generate/export a file from my webpack 2 config to be used inside of my React code? 【发布时间】:2017-11-06 08:35:34 【问题描述】:

我将NODE_ENV 变量从package.json 传递到我的webpack.config,以便返回一个包含本地或生产API 端点的对象。

1) 包.json

"scripts": 
    "dev": "NODE_ENV=development webpack-dev-server --history-api-fallback",
    "prod": "NODE_ENV=production webpack -p",
    "build": "NODE_ENV=production webpack -p"

2) 端点.js

function endpoints(env) 
    let prefix = env === 'development' ? 'http://localhost' : '';

    return 
        "login": `$prefix/app/api/login`
    


module.exports = endpoints;

3) webpack.config

const webpack = require('webpack')
const htmlWebpackPlugin = require("html-webpack-plugin");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require("path");
const dist = path.resolve(__dirname, "dist");
const src = path.resolve(__dirname, "src");
const endpoints = require("./src/endpoints");
const api = endpoints(process.env.NODE_ENV);

console.log('webpack api', api);

module.exports = 
  context: src,
  entry: [
    "./index.js"
  ],
  output: 
    path: dist,
    // ....

在下面我可以看到 const apiconsole.log


现在我的问题是,我现在如何生成或导出一个实际文件 api 以在我的 src/services/api 文件中使用:

import axios from 'axios'
// import api from '../../webpack.config' <-- ?
// import api from '../../api.js <-- ?

const log = (method, err) => 
    console.error(`%c$method`, 'background: #393939; color: #F25A43', err);
    return null;
;

export const userLogin = (username, password) => 
    const post_data =  username, password ;
    return axios.post('http://localhost/app/api/login', post_data)  // <-- api to be used here
        .then(res => res)
        .catch((err) => log('api.userLogin', err));
;

【问题讨论】:

【参考方案1】:

我认为这是XY problem。您可以使用一点 Node 生成文件(类似于 fs.writeFileSync('api.js', contents),或者您可以使用一些 shell 脚本来完成,但您也可以使用 DefinePlugin 在代码中使用 env(例如:@987654325 @。然后你就可以直接在你的代码中访问env

【讨论】:

哦,太好了!现在查看 DefinePlugin,这听起来是最干净的方法。

以上是关于如何从我的 webpack 2 配置中创建/生成/导出文件以在我的 React 代码中使用?的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 2 开发工具不工作

为啥 webpack 没有从我的动态导入中生成块?

我可以从我的 webview 浏览器中创建一个链接来调用特定函数吗

如何在Laravel 5.2中创建QR码?

如何更改在界面生成器中创建的 UINavigationBar 的标题

如何从我当前的对象数据数组中创建一个新的对象数组