webpack打包nodejs后端应用

为了保护知识产权,需要把后端nodejs代码打包。

webpack基本知识就不讲了,只讲我解决的问题。

  1. 排除外部依赖,实现代码分离,参见webpack。
    这个由externals完成,参考了引用1. 说实话,我没明白为什么要加 'commonjs '。可以参考外部扩展(externals)的function部分。
  2. 编译期外部依赖,现在2020年了,网上的很多文章都过时了,现在的依赖包参见devDependencies。
  3. 运行时报告错误:regeneratorRuntime is not defined。解决办法:
    @babel/preset-env加上"targets": { “node”: true },添加@babel/runtime运行时依赖。@babel/polyfill已经过时了。
  4. 运行时报告错误:failed to lookup view ‘error’ in views。解决办法:
    添加:node: { __dirname: true },

最终的webpack.config.js内容:

'use strict';

var path = require('path');
var webpack = require('webpack');
let externals = _externals();
module.exports = {
    mode: 'production',
    entry: './bin/www',
    externals: externals,
    target: 'node',
    output: {
        path: path.resolve(__dirname, 'bin/'),
        filename: 'oauth-server.bundle.js'
    },
    node: {
        __dirname: true
    },
    module: {
        rules: [
            {
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [['@babel/preset-env', {
                            "targets": {
                                "node": true
                            }
                        }]]
                    }
                },
                test: /\.js$/,
                exclude: /node_modules/
            }
        ]
    },
    optimization: {
        minimize: true
    }
};

function _externals() {
    let manifest = require('./package.json');
    let dependencies = manifest.dependencies;
    let externals = {};
    for (let p in dependencies) {
        externals[p] = 'commonjs ' + p;
    }
    return externals;
}

最终的package.json的内容:

{
    "name": "oauthserver2",
    "version": "0.0.0",
    "private": true,
    "scripts": {
        "dev": "node ./bin/www",
        "build": "webpack",
        "run": "node ./bin/oauth-server.bundle.js"
    },
    "dependencies": {
        "@babel/runtime": "^7.7.7",
        ...
    },
    "devDependencies": {
        "@babel/core": "^7.7.7",
        "@babel/preset-env": "^7.7.7",
        "babel-loader": "^8.0.6",
        "webpack": "^4.41.5",
        "webpack-cli": "^3.3.10"
    }
}

参考:
webpack打包node.js后端项目
Babel 6 regeneratorRuntime is not defined
Webpack bundled express app fails to lookup view
@babel/preset-env#targets
@babel/runtime

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值