轻松在web service中排除node模块

・6 分钟阅读

  • 源代码名称: webpack-node-externals
  • 源代码网址: https://www.github.com/liady/webpack-node-externals
  • webpack-node-externals的文档
  • webpack-node-externals的源代码下载
  • Git URL:
    git://www.github.com/liady/webpack-node-externals.git
  • Git Clone代码到本地:
    git clone https://www.github.com/liady/webpack-node-externals
  • Subversion代码到本地:
    $ svn co --depth empty https://www.github.com/liady/webpack-node-externals
                              Checked out revision 1.
                              $ cd repo
                              $ svn up trunk
              
  • web pack node模块扩展

    轻松在web service中排除node模块

    VersionDownloadsBuild Status

    webdav允许你定义忽略绑定的扩展模块。

    当你为后端绑定web pack时,你通常不想捆绑它的node_modules依赖项,这个库创建一个扩展函数,当绑定到web pack时忽略,
    (灵感来自于伟大的带Webpack的后端应用程序系列)

    快速使用

    npm install webpack-node-externals --save-dev

    在你的webpack.config.js 中:

    var nodeExternals =require('webpack-node-externals');...module.exports= {
     ... target:'node', // in order to ignore built-in modules like path, fs, etc. externals: [nodeExternals()], // in order to ignore all modules in node_modules folder...};

    也就是这样,所有node模块将不再被绑定,但是,将被保留为require('module') 。

    详细概述

    描述

    这个库为所有node_modules名称扫描node_modules文件夹,并且构建扩展函数,告诉web pack不要捆绑这些模块或它们的任何子模块。

    配置

    此库接受options对象。

    options.whitelist (=[])

    externals到白名单的数组,因此,它们将包含在包中,可以接受精确字符串('module_name' ),正规表达式模式(/^module_name/ )或接受模块名的函数,并且返回是否应该包含,
    重要-如果你在web配置中设置了与node_modules中的模块相同的名称,则需要将它们重新排列。

    options.importType (='commonjs')

    代码中需要绑定模块的方法,最好保留为node模块的commonjs ,可能是文档化选项或函数callback(moduleName)之一,返回作为导入类型返回的自定义代码,例如:

    options.importType=function (moduleName) {
     return'amd '+ moduleName;
    }
    options.modulesDir (='node_modules')

    要在其中搜索node模块的文件夹。

    options.modulesFromFile (=false)

    package.json文件,而且不是node_modules文件夹中读取模块,
    接受布尔值或配置对象:

    {
     modulesFromFile:true,
     /* or */ modulesFromFile: {
     exclude: [/* sections to exclude, i.e 'devDependencies' */],
     include: [/* sections to explicitly include, i.e only 'dependencies' */]
     }
    }

    用法例子

    var nodeExternals =require('webpack-node-externals');...module.exports= {
     ... target:'node', // important in order not to bundle built-in modules like path, fs, etc. externals: [nodeExternals({
     // this WILL include `jquery` and `webpack/hot/dev-server` in the bundle, as well as `lodash/*` whitelist: ['jquery', 'webpack/hot/dev-server',/^lodash/]
     })],
     ...};

    对于大多数用例,应该使用importTypemodulesDir的缺省值。

    Q

    为什么不在web service配置中使用一个正规表达式?

    webdav允许在外部数组中插入,以捕获非相关模块:

    {
     externals: [
     // Every non-relative module is external// abc -> require("abc")/^[a-z-0-9]+$/ ]
    }

    这个库扫描node_modules文件夹,因此,只留下绑定到的实际node模块。

    如何从node_modules捆绑所需的资产(即css文件)?

    使用whitelist选项,这是可能的,我们可以简单地告诉webdav将所有文件捆绑在一起,而不是js/jsx/json,使用 :!

    ...nodeExternals({
     // load non-javascript files with extensions, presumably via loaders whitelist: [/.(?!(?:jsx?|json)$).{1,5}$/i],
    }),...
    为什么不把node_modules捆绑成一个好东西?

    例如,编写node库时,可能需要将代码分割为几个文件,并且使用web pack将它们捆绑起来,但是,你不希望将代码与其整个node_modules依赖项捆绑在一起,原因有两个:

    • 它会使你的npm库膨胀,
    • 它违背了整个npm依赖管理,如果你使用的是Lodash,而且库的使用者也具有相同的Lodash依赖项,则,确保只添加一次,但是在库中捆绑Lodash实际上会使它包含两次,因为npm不再管理这种依赖关系,

    作为库的使用者,我希望库代码只包含它逻辑,并只声明它依赖关系,以便我可以将其与项目中其余的依赖项合并/解析。将代码与依赖关系捆绑在一起实际上是不可能的。

    简而言之:如果您的代码被具有由npm管理的依赖项的东西使用,那么它是有用的,

    捐赠

    欢迎捐赠和请求请求,请运行测试以确保没有任何中断。

    测试

    npm run test

    许可证

    MIT

    讨论
    Fansisi profile image