我可以从捆绑的javascript应用程序加载文件吗?

我可以从捆绑的javascript应用程序加载文件吗?,javascript,node.js,typescript,webpack,gulp,Javascript,Node.js,Typescript,Webpack,Gulp,我有一个节点应用程序,它在构建时被捆绑到一个文件中。我想从这个捆绑包中分离出应用程序配置参数(它只是一个简单的对象) /build目录中只填充了三个文件:index.js、config.js和一个映射文件 当我cd进入目录并使用node index.js启动应用程序时,我得到以下错误: TypeError: Cannot read property 'logPath' of undefined at Module.<anonymous> (/home/*/repo/build

我有一个节点应用程序,它在构建时被捆绑到一个文件中。我想从这个捆绑包中分离出应用程序配置参数(它只是一个简单的对象)

/build
目录中只填充了三个文件:
index.js
config.js
和一个映射文件

当我
cd
进入目录并使用
node index.js
启动应用程序时,我得到以下错误:

TypeError: Cannot read property 'logPath' of undefined
    at Module.<anonymous> (/home/*/repo/build/index.js:1:2367)
    at t (/home/*/repo/build/index.js:1:172)
    at /home/*/repo/build/index.js:1:964
    at Object.<anonymous> (/home/*/repo/build/index.js:1:973)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
我正在使用的网页包配置看起来是这样的

const path = require('path');
const nodeExternals = require('webpack-node-externals');

function excludeConfig(context, request, callback) {
    /config/.test(request)
        ? callback(null, 'require("./config.js")', + request)
        : callback();
}

module.exports = {
    entry: {
        index: path.resolve(__dirname, './src/server/index.js')
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                loader: 'awesome-typescript-loader',
                exclude: ['node_modules']
            }, {
                test: /\.js$/,
                loader: 'source-map-loader',
                enforce: 'pre'
            }
        ]
    },
    resolve: {
        extensions: ['.ts', '.tsx', '.js', '.jsx'],
        modules: [path.resolve(__dirname, 'node_modules')]
    },
    devtool: 'source-map',
    output: {
        filename: 'index.js',
        path: path.join(__dirname, '/build')
    },
    mode: 'production',
    target: 'node',
    externals: [
        nodeExternals(),
        excludeConfig
    ],
};
gulp正在使用以下策略构建我的配置文件

const ts = require('gulp-typescript');
const tsProject = ts.createProject('tsconfig.json');
gulp.task('add-config', function () {
    return gulp
        .src('src/*config.ts')
        .pipe(tsProject())
        .pipe(gulp.dest('build'));
});
tsconfig.json
文件如下所示:

{
    "compilerOptions": {
        "outDir": "./build",
        "allowJs": true,
        "checkJs": false,
        "module": "commonjs",
        "target": "es5",
        "moduleResolution": "node",
        "lib": ["es2015", "dom"]
    }
}
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../config */ "./../config");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_config__WEBPACK_IMPORTED_MODULE_1__);
const PATH = _config__WEBPACK_IMPORTED_MODULE_1___default.a.logPath.replace(/\/*$/, '');
我的直觉是,在构建之后,配置文件并没有提供bundle所期望的内容

捆绑包不包含以下行:

function (e, r) { e.exports = require("./config.js") }

关于如何让bundle加载
config.js
文件有什么想法吗?

似乎在进行了大量静态分析,并且对导入模块的不同方式缺乏全面了解之后,出于某种原因,bundle将我的配置文件定义为和谐导入,并尝试从文件中检索
默认值(就我而言,我没有)

有两种修复方法可用(都可以正常工作):

  • 通过在导入周围使用括号将导入样式从使用默认值更改为其他样式(我不知道为什么我更喜欢这种方式)
  • 更改导出样式并采用默认管线
然后将其传递到另一个模块并按如下方式加载:

{
    "compilerOptions": {
        "outDir": "./build",
        "allowJs": true,
        "checkJs": false,
        "module": "commonjs",
        "target": "es5",
        "moduleResolution": "node",
        "lib": ["es2015", "dom"]
    }
}
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../config */ "./../config");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_config__WEBPACK_IMPORTED_MODULE_1__);
const PATH = _config__WEBPACK_IMPORTED_MODULE_1___default.a.logPath.replace(/\/*$/, '');
请注意
\u config\u WEBPACK\u IMPORTED\u MODULE\u 1\u\u\u\code>已经包含我的配置对象的内容。但是,WEBPACK将其发送到一个函数
n
,该函数将导入封装到成员
a
上的getter函数中。如果模块被标记为
e,则此封装解析为使用
默认值
sModule

__webpack_require__.n = function(module) {
    var getter = module && module.__esModule ?
        function getDefault() { return module['default']; } :
        function getModuleExports() { return module; };
    __webpack_require__.d(getter, 'a', getter);
    return getter;
};
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../config */ "./../config");
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_config__WEBPACK_IMPORTED_MODULE_1__);
const PATH = _config__WEBPACK_IMPORTED_MODULE_1___default.a.logPath.replace(/\/*$/, '');
__webpack_require__.n = function(module) {
    var getter = module && module.__esModule ?
        function getDefault() { return module['default']; } :
        function getModuleExports() { return module; };
    __webpack_require__.d(getter, 'a', getter);
    return getter;
};