如何导入从webpack.config生成的javascript导出文件? 问题描述

如何导入从webpack.config生成的javascript导出文件? 问题描述,javascript,node.js,import,npm,webpack,Javascript,Node.js,Import,Npm,Webpack,我需要设置开发或生产环境,这样我就可以在本地测试API,或者让它们为生产做好准备 ie:使用http://localhost/api/app/login或/api/app/login 现在,我可以通过将NODE_ENV变量附加到package.json中的npm脚本和webpack.config中的几行代码来实现这一点: "scripts": { "dev": "NODE_ENV=development webpack-dev-serve

我需要设置开发或生产环境,这样我就可以在本地测试API,或者让它们为生产做好准备

ie:使用
http://localhost/api/app/login
/api/app/login

现在,我可以通过将NODE_ENV变量附加到package.json中的npm脚本和webpack.config中的几行代码来实现这一点:

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

const environment = process.env.NODE_ENV;
....
new CopyWebpackPlugin([{ from: "static" }])
^这将创建一个我可以在
services/api.js
文件中使用的环境现在我的问题是,我的Jest测试每次都会失败,因为
env
未定义

尝试解决方案-需要帮助吗 因此,现在我要做的是使用node实际生成一个Javascript文件,我可以直接将它导入我的
services/api.js
,这样我就避免了测试中未定义的
env
错误

我可以创建一个Javascript文件,并对我的webpack.config进行以下更新

const fs = require('fs');
const webpack = require('webpack')
const environment = process.env.NODE_ENV;

// fs.writeFileSync('src/consts/env.txt', environment);

const stream = fs.createWriteStream("src/consts/endpoints.js");
stream.once('open', function(fd) {
  stream.write('export const environment = () => "'+environment+'"');
  stream.end();
});
const environment = process.env.NODE_ENV;

const stream = fs.createWriteStream("src/services/environment.js");
stream.once('open', function(fd) {
  stream.write('const env = "'+environment+'"\n');
  stream.write('export default env');
  stream.end();
});
它创建的文件(src/consts/endpoints.js):

export const environment = () => "development"
我也试过这样做:

export const environment = "development"
现在我的更新版
服务/api.js

import axios from 'axios'
import environment from '../consts/endpoints'
console.log('api.js environment:', environment);
但是,当我签出localhost时,环境是未定义的。


我如何解决这个问题?这是比赛条件吗?是否有其他方法生成需要导入的文件

我试图生成一个.txt文件,但是我不能在本地导入该文件,只能在云中导入

完整的webpack.config文件 明白了! 我导入的文件不正确

因此,从webpack.config

const fs = require('fs');
const webpack = require('webpack')
const environment = process.env.NODE_ENV;

// fs.writeFileSync('src/consts/env.txt', environment);

const stream = fs.createWriteStream("src/consts/endpoints.js");
stream.once('open', function(fd) {
  stream.write('export const environment = () => "'+environment+'"');
  stream.end();
});
const environment = process.env.NODE_ENV;

const stream = fs.createWriteStream("src/services/environment.js");
stream.once('open', function(fd) {
  stream.write('const env = "'+environment+'"\n');
  stream.write('export default env');
  stream.end();
});
^生成此文件(src/services/environment.js),其中包含:

const env = "development"
export default env
最后,在我的services/api.js文件中,我可以按照我想要的方式使用import语句,我缺少上面的
export default

import axios from 'axios'
import endpoints from './endpoints'
import env from './environment'

const api = endpoints(env);
console.log('api', api);

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

export const userLogin = (username, password) => {
    const post_data = { username, password };
    return axios.post(api.login, post_data)
        .then(res => res)
        .catch((err) => log('api.userLogin', err));
};
在mypackage.json中,我可以将ENV变量更改为吐出
“development”
“production”