【问题标题】:Typescript + Webpack + Node and process.env is emptyTypescript + Webpack + Node 和 process.env 是空的
【发布时间】:2019-09-16 15:50:01
【问题描述】:

我尝试先用 TypeScript 编译我的应用程序,然后再用 Webpack。我需要这个,因为我的服务器必须是单个 js 文件。

你可以在这里下载我的问题项目:

https://s3-ap-southeast-2.amazonaws.com/test-bucket-alsh/untitled+folder.zip

index.ts

console.log(process)
console.log(process.env)

webpack.config.js

module.exports = {
    entry: path.join(__dirname, '/index.ts'),
    mode,
    node: {
        console: true,
        global: true,
        process: true,
        __filename: true,
        __dirname: true,
        Buffer: true,
        setImmediate: true
    },
    output: {
        filename: 'index.js',
        path: __dirname
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: ['ts-loader']
            }
        ]
    }
}

tsconfig.json

{
    "compilerOptions": {
        "target": "es5", 
        "module": "commonjs",  
        "moduleResolution": "node",
        "baseUrl": "./",
        "outDir": "./dist/",
        "sourceMap": true,
        "esModuleInterop": true,
        "lib": [
            "es2016"
        ],
        "types": [
            "node"
        ]
    },
    "exclude": [
        "node_modules"
    ]
}

npx webpack && node index.js

结果

{ nextTick: [Function],
    title: 'browser',
    browser: true,
    env: {},
    argv: [],
    version: '',
    versions: {},
    on: [Function: noop],
    addListener: [Function: noop],
    once: [Function: noop],
    off: [Function: noop],
    removeListener: [Function: noop],
    removeAllListeners: [Function: noop],
    emit: [Function: noop],
    prependListener: [Function: noop],
    prependOnceListener: [Function: noop],
    listeners: [Function],
    binding: [Function],
    cwd: [Function],
    chdir: [Function],
    umask: [Function] }
{}

【问题讨论】:

  • 转译的index.js的内容是什么?
  • 预期结果是什么?你console.log两个对象,一个是process,另一个是process.env,里面是空的。怎么了?
  • 环境应该填充我系统的环境,但是它是空的。假设我运行MYVAR=something && npx webpack && node index.jsprocess.env.MYVAR 将是undefined
  • MYVAR=something && npx webpack && node index.js MYVAR=something 应该在 EVERY COMMAND 前面明确添加您想要为其设置环境变量的内容。例如:npx webpack && MYVAR=something node index.js。否则你可以先export MYVAR=something它。
  • 抱歉,语法不准确。我的观点是,在 shell 中显式设置环境变量并运行应用程序将证明不显示任何变量。用我提供的同一个应用程序试试,你会明白我的意思

标签: node.js typescript webpack


【解决方案1】:

您必须使用 npm 包将环境变量注入您的项目。 dotenv 是最受欢迎的。您所要做的就是在您的项目的根目录中,也就是您的 package.json 所在的位置,创建 .env 文件并添加您的环境变量,如下所示:

DB_URL=DB_URI=mongodb://127.0.0.1:27017/myDb // without strings

然后在 package.json 中用脚本注入变量:

      "dev": "nodemon --watch dist --exec  \"node -r dotenv/config dist/bundle.js\"",

【讨论】:

    【解决方案2】:

    我重新阅读了标题,我猜你的问题是 process.env 是空的。我对吗?在这种情况下,这就是您添加环境变量的方式。

    process.env.someVariable = "some variable";
    console.log(process.env);
    

    如果这不是你的问题,你会指定预期的结果吗?

    此外,您可以将环境变量存储在 .env 文件中,该文件必须放在项目的根目录中。要访问它们,您可以使用 dotenv npm 包。

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 2021-07-29
      • 2020-11-08
      • 2019-04-18
      • 2015-05-19
      • 1970-01-01
      • 2019-11-02
      • 2022-01-23
      • 2017-12-24
      相关资源
      最近更新 更多