Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Webpack正确地不包含死代码,但绑定了死代码的依赖项_Javascript_Webpack_Webpack 2 - Fatal编程技术网

Javascript Webpack正确地不包含死代码,但绑定了死代码的依赖项

Javascript Webpack正确地不包含死代码,但绑定了死代码的依赖项,javascript,webpack,webpack-2,Javascript,Webpack,Webpack 2,我在捆绑同构/通用应用程序时遇到问题。出于某种原因,treeshaking和uglify都完全忽略了MongoDB不在任何代码路径中使用的事实,并将其包含到我的浏览器包中,这使得它非常大(1.3MB)并且不可用(因为本机节点模块)。它应该省略所有与MongoDB相关的代码,因为它是未使用的。它甚至正确地从包中删除了死代码分支,但MongoDB依赖项仍然存在,未使用 我的入口点(index.js): ioc.js: // omitted Inversify setup import { TestS

我在捆绑同构/通用应用程序时遇到问题。出于某种原因,treeshaking和uglify都完全忽略了MongoDB不在任何代码路径中使用的事实,并将其包含到我的浏览器包中,这使得它非常大(1.3MB)并且不可用(因为本机节点模块)。它应该省略所有与MongoDB相关的代码,因为它是未使用的。它甚至正确地从包中删除了死代码分支,但MongoDB依赖项仍然存在,未使用

我的入口点(index.js):

ioc.js:

// omitted Inversify setup
import { TestService } from "./services/TestService";

if (DEPLOYMENT_NODE == true) // DefinePlugin sets this to false; only the 'else' branch is correctly included in the bundle
{
    container.bind("test").to(TestService);
}
else
{
    container.bind("test").toConstantValue(createClient(API_URL, "test"));
}
TestService.js:

import { injectable } from "inversify";
import { MongoClient } from "mongodb";

@injectable()
export class TestService
{
    public async retrieveTestMessage()
    {
        if (DEPLOYMENT_NODE == true)
        {
            // omitted MongoClient usage
        }
    }
}
createClient函数:

export function createClient(url, service)
{
    const client = new Proxy(
        {},
        {
            get: (target, property, receiver) => async (...params) => fetch(url, { headers: new Headers({ "Content-Type": "application/json" }), method: "POST", body: JSON.stringify({ id: 0, service: service, method: property, parameters: params }) }) 
        }
    );

    return client;
}
我试图在我的网页包配置中使用
webpack.IgnorePlugin(/mongodb/)
,但它确实不包括mongodb,但捆绑包随后失败,出现“mongodb module not found”错误,即使它根本没有使用

如果有人有任何其他建议,我们将不胜感激。谢谢


编辑:我正在使用最新的Webpack 2 beta版,并在我的babel配置中保留ES6模块。

条件下的显式要求应该有效

import { injectable } from "inversify";

@injectable()
export class TestService
{
    public async retrieveTestMessage()
    {
        if (DEPLOYMENT_NODE == true)
        {
            const { MongoClient } = require("mongodb");
            // omitted MongoClient usage
        }
    }
}

将其保持在死区是最好的方法(y)!你可以配置一个空的模块加载器,添加一个自定义的上下文解析器,或者使用一些其他的Webpack技巧使其工作,但这确实会提高其他人的WTF速率;所以这并不是答案(但它工作正确),而是把我推向了正确的方向。非常感谢。
import { injectable } from "inversify";

@injectable()
export class TestService
{
    public async retrieveTestMessage()
    {
        if (DEPLOYMENT_NODE == true)
        {
            const { MongoClient } = require("mongodb");
            // omitted MongoClient usage
        }
    }
}