javascript - 在 webpack 编译的 JavaScript 中读取 NodeJS process.argv

标签 javascript node.js typescript npm webpack

我正在尝试使用 webpack(通过“awesome-typescript-loader”)编译一个简单的 TS 文件,该文件应该读取命令行参数。

但是,我相信编译后的 JS 正在使用闭包重新定义 Node“process”变量 - 使 process.argv“未定义”。

TL;DR:如何使用 webpack 编译的 JS 读取命令行参数?

a.ts

console.log(process.argv[2]);

webpack.config.js

const path = require('path');

module.exports = {
    resolve:{
      extensions: ['.ts']
    },
    module: {
      rules: [{
          test: /\.ts$/,
          loaders: ['awesome-typescript-loader'],
          include: [
              path.resolve(__dirname, "src")
          ]
      }]
    },
    entry: {
        a: "./src/a.ts"
    },
    output: {
        path: path.resolve(__dirname, 'output'),
        filename: '[name].js'
    }
};

package.json

{
  "name": "my-proj",
  "version": "1.0.0",
  "description": "some purpose",
  "scripts": {
    "start:a": "rimraf output/a.js & webpack --watch && node output/a.js myarg",
    "lint": "tslint \"src/*.ts\"",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "javascript",
    "node"
  ],
  "author": "some guy",
  "license": "ISC",
  "dependencies": {
    "@types/lodash": "^4.14.56",
    "core-js": "^2.4.1",
    "lodash": "^4.17.4",
    "mathjs": "^3.10.0",
    "path": "^0.12.7",
    "rxjs": "^5.2.0",
    "ts-loader": "^2.0.2",
    "typings": "^2.1.0",
    "yargs": "^7.0.2"
  },
  "devDependencies": {
    "@types/node": "^7.0.8",
    "awesome-typescript-loader": "^3.1.2",
    "compression-webpack-plugin": "^0.3.2",
    "concurrently": "^3.4.0",
    "copy-webpack-plugin": "^4.0.1",
    "cross-env": "^3.2.4",
    "external-loader": "^0.1.1",
    "extract-text-webpack-plugin": "^2.1.0",
    "file-loader": "^0.10.1",
    "nodemon": "^1.11.0",
    "null-loader": "^0.1.1",
    "raw-loader": "^0.5.1",
    "rimraf": "^2.6.1",
    "tslint": "^4.5.1",
    "typescript": "^2.2.1",
    "webpack": "^2.2.1",
    "webpack-merge": "^4.1.0"
  }
}

For building without script simply run: "webpack", go to output folder, and run "node a.js myarg"

最佳答案

默认情况下,webpack 会创建一个在浏览器中运行的包。浏览器没有进程,因此您无法访问命令行参数。但当您尝试读取命令行参数时,您可能希望构建一个在 Node.js 中运行的应用程序,而不是在浏览器中运行。您可以通过设置 target 来做到这一点 Node 的选项。

将其添加到您的 webpack 配置中:

target: 'node'

关于javascript - 在 webpack 编译的 JavaScript 中读取 NodeJS process.argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983657/

相关文章:

javascript - 如果超过某个限制时间,如何在 Node.js 中完成一项操作?

node.js - 运行 yeoman AngularJS 生成器时出错

javascript - Nest无法解析存储库的依赖关系

typescript - 强制执行接口(interface)值的类型

Angularjs - Resharper intellisense 打破了 TypeScript?

javascript - 如何使用 Excel javascript API 设置工作表的自定义设置?

javascript - 如何移动 JQuery 工具提示

javascript - 以不可变的方式删除嵌套数组中的对象

javascript - Google 图表树形图工具提示中的数字格式

image - 在这个node.js图像模块中,我应该使用哪个? (读取流还是从路径?)