webpack-externals过滤文件

news/2024/7/19 16:06:16 标签: nodejs, webpack, externals, js
/*
* 研究使用webpack也有一段时间了,现在终于有了大概的认识和了解,下边是一个简单的例子,不懂的朋友可以照猫画虎,哈哈
* */
var fs = require('fs');
var path = require('path');
var nodeModules = {};
//过滤node_modules中的所有模块
fs.readdirSync('node_modules')
    .filter(function(x) {
        return ['.bin'].indexOf(x) === -1;
    })
    .forEach(function(mod) {
        nodeModules[mod] = 'commonjs ' + mod;
    });

//过滤自己本地的文件
nodeModules['./src/myfile'] = 'commonjs ./src/myfile';

module.exports ={
    entry:
        {
            'src/api'     :'./src/api.js',
        },
    output:{
        path:('./build'),
        filename:'[name].js',
        libraryTarget:'commonjs'
    },
    module:{
        loaders:[
            {test:/\.js$/,loader:'babel'},
            {test:/\.json$/,loader:'json'}
        ]
    },
    externals:nodeModules,
    target:'node'
}
 
webpack压缩混淆的时候它会把所有require()进来的文件都打包进去,如果不想让它把某个文件打包进去,那么可以使用externals来进行过滤,这样他就不会把这个文件打包进去,保证require仍然有效,但是一定要注意externals的使用格式,刚开始在网上看了很多的格式,都不起作用,最后终于在一篇文章中找到了答案:
过滤node模块:
externals:{"module1":"commonjs module1","module2":"commonjs module2"}
过滤自个的文件:
externals:{"./dir/file1":"commonjs ./dir/file1","./dir/file2":"commonjs ./dir/file2"}
注意在字段值的前边一定要加上commonjs,否则是不起作用的,当然这是打包js>nodejs后台的代码,不是web前端哦
还有打包的时候一般情况下你的node_modules文件夹底下要有这三个模块:babel-core、babel-loader、json-loader,这三个模块使用npm下载就行,例如:npm install babel-core
webpack的使用就不多说了,网上的教程一大把,自己百度
参考http://sanwen.net/a/nrwvbbo.html

可能报错:
throw new TypeError('Router.use() requires middleware function but got a ' + gettype(fn));
TypeError: Router.use() requires middleware function but got a Object

出现该错误的原因主要是路由的导出(或者文件的导出)方式导致的,使用传统的module.export方式导出,如果是源码那么require这个文件得到的会是一个function,这是没有问题的,但是使用webpack打包后,require这个文件将会得到一个object,有木有觉得不可思议,没错,它确实硬生生给你甩出来了一个object
有两种方法可以解决:
1.将源文件中的module.exports导出方式改成exports,再使用webpack进行打包,
  例如:module.exports = router   ---->  exports.getRouter = router
              	 |				          |
	 	\|/				         \|/
       require('./routes')       ---->  require('./routes').getRouter
2.修改webpack打包后的代码,如下图:
  
当然推荐使用第一种方法了,第二种算是终极办法吧,万不得已才使用(例如代码已经打包好,不想再重新打包,则可以使用该方法)


                

http://www.niftyadmin.cn/n/1727625.html

相关文章

postgresql数据库--psql、pg_dump命令带密码执行sql语句

pg_dump: pg_dump -a -t tbl_test "host127.0.0.1 hostaddr127.0.0.1 port5432 userpostgres password123456 dbnamepostgres" > /userdir/tbl_data -a 参数是表示只导出数据,其他的额外信息不需要,该参数也可去掉 psql: psql --comman…

js Date()函数常用方法

代码: var date new Date(); var a date.getDate(); console.log("getDate:"a); var b date.getDay(); console.log("getDay:"b); var c date.getFullYear(); console.log("getFullYear:"c); var d date.getHours(); console.l…

微服务实战系列之SpringCloud Alibaba学习(六)

微服务实战系列之SpringCloud Alibaba: 微服务实战系列之SpringCloud Alibaba学习(一)微服务实战系列之SpringCloud Alibaba学习(二)微服务实战系列之SpringCloud Alibaba学习(三)微服务实战系…

shell 去掉多余空格

cat test.txt |tr -s [:space:]sed s/ */ /g test.txt 如果要改变test.txt文件本身,sed后边可加上“-i”参数

PG数据库获取时间函数

select now(); //2017-01-17 20:43:31.94601508 select date_trunc(second, now()); //2017-01-17 20:28:3308 SELECT CURRENT_TIMESTAMP(0) :: TIMESTAMP WITHOUT TIME ZONE; //2017-01-17 20:28:33

WIN7环境下通过ISS7快速搭建简易FTP服务器

WIN7环境下通过ISS7快速搭建简易FTP服务器 首先开启ISS7服务: 打开控制面板-->程序(卸载程序)-->打开或关闭Windows功能-->打开internet服务,勾选相关选项,点击右下角的确定按钮,至此ISS服务启动成功。 1.搭建不需要输…

同时查询多张表中的数据个数

select my1.a,my2.b,my3.c from (select count(*) as a from tbl_a) as my1 , (select count(*) as b from tbl_b) as my2 , (select count(*) as c from tbl_c) as my3; 同时查询两张表 select * from (select * from tbl_a) as a,(select * from tbl_b) as b;

ubuntu使用chkconfig命令来管理服务

安装命令: sudo apt-get install chkconfig (可以用sysv-rc-conf代替)在ubuntu下使用应该会出现这样的错误: /sbin/insserv: No such file or directory 解决办法:sudo ln -s /usr/lib/insserv/insserv /sbin/insserv