在日常业务开发过程中,我们可能需要内联文本,JS,CSS到页面,这时我们可以 raw-loader webpack loader 实现。

raw-loader

import txt from 'raw-loader!./file.txt';

Vue 内联 JavaScript

  • template 直接内联代码
const vConsoleScript = `<script async src="//cdn.com/script/vConsole.min.js"></script>';  

<template v-html="vConsoleScript"></template>
  • template 结合 raw-loader 内联脚本
// inline.js
function inlineTest() {
  var name = 'easywebpack';
  var desc = 'easywebpack vue js inline';
  return name + '-' + desc;
}

// inline.vue
import inlineCode from 'raw-loader!./inline.js';

<template>
  <div>
     <template v-html="inlineScript"></template>
       <template v-html="inlineJSFileScript"></template>
  </div>
</template>

<script type="babel">
export default {
 computed: {
   inlineScript() {
     return '<script>console.log("inline js code");</script>';
   },
   inlineJSFileScript() {
     return `<script>${inlineCode}</script>`;
   }
  }
}
</script>

React 内联 JavaScript

在日常业务开发过程中,我们可能需要内联文本,JS,CSS到页面,这时我们可以通过 webpack raw-loader 把文件转成字符串,为了防止 javaScript 被转义, 可以通过 dangerouslySetInnerHTML inline javaScript 代码。

// inline.js
function inlineTest(a, b) {
  console.log('Egg React inline javascript');
  var name = 'Egg React';
  var title = 'Server Side Render';
  return name + '-' + title;
}

import React, { Component } from 'react';
import HeaderComponet from './header';
import inlineTest from 'raw-loader!./inline.js';
export default class Layout extends Component {

  render() {
    const inlineCode = `
      function inlineCodeTest() {
        console.log('React inline Code javascript');
        var name = 'React';
        var title = 'Inline Test';
        return name + '-' + title;
      }
    `;
    return <html>
        <head>
          <title>{this.props.title}</title>
          <meta charSet="utf-8"></meta>
          <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"></meta>
          <meta name="keywords" content={this.props.keywords}></meta>
          <meta name="description" content={this.props.description}></meta>
          <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"></link>
          <script src="/public/lib/react-core-lib-1.0.0.min.js"></script>
          <script dangerouslySetInnerHTML={{__html: inlineCode }}></script>
          <script dangerouslySetInnerHTML={{__html: inlineTest }}></script>
          <script>inlineFileTest();inlineCodeTest();</script>
        </head>
        <body><div id="app"></div></body>
     </html>
  }
}

Webpack 构建资源内联

指定 JS / Css 内联

// webpack.config.js
const HtmlWebpackInlineSourcePlugin = require("html-webpack-inline-source-plugin");
module.exports = {
   // ....
   plugins:[
    {
      html: {
        inlineSource: /runtime(.[A-Za-z0-9]+)?.js$|index(.[A-Za-z0-9]+)?.css$/
      }
    },
    new HtmlWebpackInlineSourcePlugin()
  ]
}

全部资源内联

// webpack.config.js
const HtmlWebpackInlineSourcePlugin = require("html-webpack-inline-source-plugin");
module.exports = {
   // ....
   plugins:[
    {
      html: {
        inlineSource: /.(js|css)$/
      }
    },
    new HtmlWebpackInlineSourcePlugin()
  ]
}

Author: sky
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source sky !
 Previous
JS 打包工程方案 JS 打包工程方案
我们经常会遇到单独对 JS 打包的场景,比如 es6 写的 npm 包需要构建成 es5 模式. easywebpack 也提供了对应的解决方案: easywebpack-js基于 easywebpack-js 构建配置编写// build/index.js const easywebpac...
2020-04-18 sky
Next 
多页面举例 多页面举例
基于 easywebpack-cli 模式构建Vue前端渲染项目一. 全局安装 easywebpack-cli 插件npm i easywebpack-cli -g 安装成功以后, 就可以在命令行中使用 easy 或 easywebpack 命令, 比如 easy build, easy server, easy print 等二. 添加 webpack.config.js 配置在项目根目录添加 webpack.config.js 文件, 添加如下配置const path = require(...
2020-04-18 sky