node js从模块化代码结构中缩小并连接到单个文件

时间:2017-01-30 11:48:06

标签: javascript node.js webpack minify

我有一个基于NodeJS的模块化应用程序。 应用程序的结构类似于

  • server.js
  • 控制器
    • controller1.js
    • controller2.js
    • dao1.js
    • dao2.js
  • node_modules

现在我想将整个项目缩小并连接成一个文件。我面临的挑战是每个控制器和dao文件都使用“ require ”(相对路径)来包含节点模块
有没有简单的方法来实现这个目标?

修改

尝试了webpack模块
我的webpack.config.js看起来像

var webpack = require('webpack');
var path = require('path');
var fs = require('fs');

var nodeModules = {};
fs.readdirSync(path.resolve(__dirname, 'node_modules'))
.filter(x => ['.bin'].indexOf(x) === -1)
.forEach(mod => { nodeModules[mod] = `commonjs ${mod}`; });

module.exports = {
  name: 'server',
  target: 'node',
  entry: './server.js',
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'bundle.js'
  },
  externals: nodeModules,
  module: {
    loader: [
      {
        test: /\.json$/, loader: 'json-loader'
      }
    ]
  }
}

它给出了这个错误:

  错误在./~/npm/~/npm-registry-client/test/unpublish-scoped.js   找不到模块:错误:无法解析'文件'或'目录'./fixtures/@npm/np   D:\ OTTAFW \ node_modules \ npm \ node_modules \ npm-regi中的m-registry-client / cache.json   斯特雷客户端\测试

2 个答案:

答案 0 :(得分:0)

你看过webpack了吗? https://webpack.js.org/concepts/

答案 1 :(得分:0)

您可以使用像gulp这样的任务运行器进行缝合和缩小。如果您想直接缝合和缩小文件,请参阅here。为了管理依赖关系,您必须定义依赖关系树并编写逻辑,以便在最终构建中不添加多个依赖关系。

server.js
controllers
|-- controller1.js
          require('lodash')
|-- controller2.js
          require('./controller1')
dao
|-- dao1.js
          require('lodash')
          require('../controllers/controller2')
|-- dao2.js
          require('../controllers/controller1')
node_modules

假设,如果是这种情况,你必须注意文件只附加一次的事实。

相反,您可以使用rollup