node.js - webpack 在 node服务器使用模板引擎 引入打包好的js问题
ringa_lee
ringa_lee 2017-04-17 13:24:53
[Node.js讨论组]

webpack 打包出来2个js 我想在ejs中引入这2个js 现在是写死文件名的。

#layout.ejs
<script type="text/javascript" src="/__build__/vendor.js"></script>
<script type="text/javascript" src="/__build__/app.js?v=0.11"></script>

我想要的效果是 webpack 打包出来 [name].[hash:8].js ,但是上面的ejs模板里面应该怎么写呢?

下面这个是我另一个纯前端项目可以这样写,但是上面这个项目用了后台渲染页面。应该怎么写?

{% for (var chunk in o.htmlWebpackPlugin.files.chunks) { %}
        <script src="{%=o.htmlWebpackPlugin.files.chunks[chunk].entry %}"></script>
{% } %}

上面的问题解决了

解决办法:添加HtmlWebpackPlugin插件

new HtmlWebpackPlugin({
    name:'layout',
    template: './server/views/layout.html',
    filename: 'layout.html',
    inject: 'body',
    chunks: ['vendor', 'app']
})

但是又出来新问题了,这样写的话开发环境的html是在内存里的,nodejs的res.render('layout')读不到这个编译好的html啊。。。。

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
大家讲道理

可以尝试将模板分成两个目录存放,开发阶段使用views/src/目录,正式访问可以存放到view/dist/下。

然后webpack配置也分开发和正式环境,只有正式环境需要配置HtmlWebpackPlugin插件。

ringa_lee

@dmyang 感谢。配置方法如下

开发环境配置

#server.ts
var env = config.NODE_ENV || 'development';
if (env === 'development') {
    var webpack = require('webpack');
    var webpackDevMiddleware = require('webpack-dev-middleware');
    var WebpackConfig = require('./webpack.dev.config');
    app.use(errorHandler());
    app.use(webpackDevMiddleware(webpack(WebpackConfig), {
        publicPath: '/__build__/',
        stats: {
            colors: true
        }
    }));
    app.set('views',__dirname + '/server/views/dev');
}else{
    app.set('views',__dirname + '/server/views/dist');
}

app.set('view engine', 'html');
app.engine('.html', require('ejs').__express)

#dev/layout.html
<!--这2个文件,没有hsah值,方便开发-->
<script type='text/javascript' src="/__build__/vendor.js"></script>
<script type='text/javascript' src="/__build__/app.js"></script>
<!--end-->

生产环境配置

#dist/layout.html
不手写引入js 使用HtmlWebpackPlugin插件写入



#webpack.prod.config
new HtmlWebpackPlugin({
    name:'layout',
    template: './server/views/dist/layout.html', //使用生产环境的html
    filename: 'layout.html',
    inject: 'body',
    chunks: ['vendor', 'app'], //这里引入这2个js
    minify:{    
      removeComments:true,    
      collapseWhitespace:false    
    }
  })
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号