Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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_Node.js_Webpack_Ecmascript 6_Node Modules - Fatal编程技术网

Javascript 可以一次导入一个模块,并使用Webpack将方法用于多个模块

Javascript 可以一次导入一个模块,并使用Webpack将方法用于多个模块,javascript,node.js,webpack,ecmascript-6,node-modules,Javascript,Node.js,Webpack,Ecmascript 6,Node Modules,我正在尝试学习如何使用webpack模块。我相信我现在明白了,如果一个模块从另一个模块调用一个方法,那么它必须被导入 我不明白的是,在多个模块调用另一个模块中定义的方法的情况下,我该怎么办 将所需模块导入每个js模块文件是否是处理此场景的正确方法 isObject.js const isObject = (a) => (!!a) && (a.constructor === Object); export {isObject} import {isObject} from

我正在尝试学习如何使用webpack模块。我相信我现在明白了,如果一个模块从另一个模块调用一个方法,那么它必须被导入

我不明白的是,在多个模块调用另一个模块中定义的方法的情况下,我该怎么办

将所需模块导入每个js模块文件是否是处理此场景的正确方法

isObject.js

const isObject = (a) => (!!a) && (a.constructor === Object);

export {isObject}
import {isObject} from './isObject';

const findNote = ( notes, id ) => {
    return isObject( notes.findIndex(function( note ){
        return note.id === id;
    }) );
}

export {findNote}
import {isObject} from './isObject';

const filterNotes = ( notes, filter ) => {
    return isObject( notes.filter(function( note ){
        return note.title.toLowerCase().includes( filter.toLowerCase() ) );
    });
}

export {filterNotes}
findNote.js

const isObject = (a) => (!!a) && (a.constructor === Object);

export {isObject}
import {isObject} from './isObject';

const findNote = ( notes, id ) => {
    return isObject( notes.findIndex(function( note ){
        return note.id === id;
    }) );
}

export {findNote}
import {isObject} from './isObject';

const filterNotes = ( notes, filter ) => {
    return isObject( notes.filter(function( note ){
        return note.title.toLowerCase().includes( filter.toLowerCase() ) );
    });
}

export {filterNotes}
filterNotes.js

const isObject = (a) => (!!a) && (a.constructor === Object);

export {isObject}
import {isObject} from './isObject';

const findNote = ( notes, id ) => {
    return isObject( notes.findIndex(function( note ){
        return note.id === id;
    }) );
}

export {findNote}
import {isObject} from './isObject';

const filterNotes = ( notes, filter ) => {
    return isObject( notes.filter(function( note ){
        return note.title.toLowerCase().includes( filter.toLowerCase() ) );
    });
}

export {filterNotes}

我猜你是新来的


Node.js
。每个模块只需加载一次

webpack是一个脚本绑定器。它有一个“入口点”的概念,并为每个入口点构建一个或多个脚本包

因此,如果您将
findNote.js
作为一个入口点,或者如果存在一个导入(直接或间接)
findNote.js
的现有入口点,那么包括
isObject.js
在内的所有依赖项都将包含在此捆绑包中

filterNotes.js的情况也一样。如果将其作为另一个入口点,那么它的代码及其依赖项(包括
isObject.js
)将包含在该入口点的另一个捆绑包中


因此,
isObject.js
将包含在几个包中。这可以通过一些优化来避免。

好的,因此每个模块只加载一次。我注意到,如果我的模块调用了一个我必须导入的方法,那么它必须导入到每个调用的模块中,否则在运行webpack之后,代码就会失败。有办法吗?我不太明白。你能做一个我们可以讨论的示例项目吗?那么,假设一个文件app.js是入口点,app.js导入所有3个js模块。因为findNote.js和filterNotes.js都导入了isObject.js,所以所有的代码都在最后一个捆绑包中重复了吗?@mcbeav-app.js、findNote.js、filterNotes.js和isObject.js这四个模块将被包含在捆绑包中。