美文网首页
webapck 在dev环境下读取内存中的文件

webapck 在dev环境下读取内存中的文件

作者: pipu | 来源:发表于2019-04-09 10:13 被阅读0次

webapck 在dev环境下读取内存中的文件

webpack 在dev环境中的读写会在内存中完成,它使用memory-fs插件来完成在内存中的读写。
在webpack中,webpack-dev-middleware 将 webpack 原本的 outputFileSystem (node的fs系统)替换成了MemoryFileSystem 实例,这样代码就将输出到内存中。webpack-dev-middleware 中该部分源码如下:

// webpack-dev-middleware/lib/Shared.js
var isMemoryFs = !compiler.compilers && compiler.outputFileSystem instanceof MemoryFileSystem;
if(isMemoryFs) {
    fs = compiler.outputFileSystem;
} else {
    fs = compiler.outputFileSystem = new MemoryFileSystem();
}

通过代码我们知道我们需要在webpack dev server之前将compiler.outputFileSystem 置为MemoryFileSystemde 的实例(如果是MemoryFileSystem的两个实例之间不会访问到各自的文件)
在webpack.dev.js 中


    const compiler = Webpack(WebpackBaseConfig);
    const fs = compiler.outputFileSystem = new MemoryFileSystem();

这个fs实例也是webapck的输出fs,可以访问到dev-server中的文件。

在开发中需要的需求是,在dev环境下能够将user信息渲染到页面中


    server = new WebpackDevServer(compiler, {
        inline: true,
        contentBase: [输出路径, path.resolve(__dirname, 静态路径)],
        hot: true,
        proxy: proxyConfig,
        publicPath: dev_publicPath,
        stats: {
            chunks: false,  // 使构建过程更静默无输出
            colors: true,    // 在控制台展示颜色
        },
        before(app) {
            app.engine('html', ejs.renderFile); // 配置引擎
            // app.set('views', vars.dist_root + '/templates');
            app.get('/templates/**', async (req, res) => { // 配置路由访问html的请求中获取user信息渲染
                console.log('get html request');
                const url = 'http://local.zx-math.test.17zuoye.net:3600/api/user_info_by_cookie';
                const option = {
                    url: url,
                    method: 'get',
                    headers: req.headers,
                    json: true,
                    timeout: 10000
                }
                const task_count_res = await HttpUtil.fullRequest(option);
                const user = task_count_res.body.data;
                try {
                    const file = fs.readFileSync(path.resolve(vars.dist_root) + req.url).toString();
                    // console.log(file);
                    // res.render(file,{USER:JSON.stringify(user)});
                    // res.set('Content-Type', 'text/html');
                    res.send(ejs.render(file, {USER: JSON.stringify(user)}));
                } catch (e) {
                    // console.log(e.message);
                    res.send('waiting...,等编译完手动刷新');
                }
            });
        }
    });

    server.listen(port, '', () => {
        const openUrl = inquirerConf.devOpenUrl[process.env.NODE_DRIVER_ENV];
        open(openUrl);
    });

参考链接

1.webpack内存读取技术调研及node相关

相关文章

  • webapck 在dev环境下读取内存中的文件

    webapck 在dev环境下读取内存中的文件 webpack 在dev环境中的读写会在内存中完成,它使用memo...

  • 文件操作

    读取和写入:文件有内容读取就是将文件中的内容读取到内存中。写入就是将内存中的内容写入到磁盘文件中。内存就相当于你的...

  • bash与csh下循环读取文件

    在bash和csh俩种方式读取文件内容的方式不相同, bash环境下读取的方法如下所示: csh环境下读取的方式如...

  • Linux下 快速创建大文件 命令

    1、dd命令 生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为...

  • Python基础学习day6|文件和异常

    文件和异常处理 从文件中读取数据 要使用文本文件中的信息,首先需要将信息读取到内存中。为此,我们可以一次性读取文件...

  • 2021-12-22 Python-17

    文件操作 文件读取 文件读取到内存中时,可以通过一次性读取文件的全部内容,也可以每次一行方式逐步读取。1.读取整个...

  • 第八章 文件和异常

    9.1 从文件中读取数据 要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以 一次性读取文件的 全部...

  • iOS 通过图片文件头,获取图片类型,以及图片尺寸

    有时候,我们需要获取一个图片的格式和大小,但是却不想从内存中把它的整个文件从内存中读取出来 因为读取整个文件的内存...

  • 文件读取和写入

    1.从文件中读取数据 要使用文本文件中的信息,首先需要将信息读取到内存中,。为此,可以一次性读取文件的全部内容...

  • webpack-dev-middleware webpack-h

    webpack-dev-middleware 最简单直接的理解就是运行于内存中的文件系统, webpack-dev...

网友评论

      本文标题:webapck 在dev环境下读取内存中的文件

      本文链接:https://www.haomeiwen.com/subject/dfgviqtx.html