我的设置完全相同,最终得到了一个可行的解决方案。
目录设置
_config.yml 在根文件夹:
destination: dist
source: src
keep_files:
- webpack
webpack 文件夹用于所有“webpackable”(JS、CSS、LESS、.vue、...),webpack.config.js 我用于初始设置:
const path = require('path');
const webpack = require('webpack')
const WebpackShellPlugin = require('webpack-shell-plugin')
module.exports = {
watch: true,
entry: path.join(__dirname, 'entry.js'),
output: {
path: path.join(__dirname, '..', 'dist', 'webpack'),
filename: 'bundle.js',
publicPath: '/webpack/'
},
module: {
rules: [{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'less-loader']
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: "url-loader?limit=10000&mimetype=application/font-woff"
},
{
test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: "file-loader"
},
]
},
plugins: [
// https://stackoverflow.com/a/39283602/903011
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
}),
new WebpackShellPlugin({onBuildStart:['cd .. && jekyll b --watch']})
]
}
// start live server
var liveServer = require("live-server");
var params = {
port: 8080, // Set the server port. Defaults to 8080.
root: "../dist", // Set root directory that's being served. Defaults to cwd.
open: true, // When false, it won't load your browser by default.
logLevel: 1, // 0 = errors only, 1 = some, 2 = lots
};
liveServer.start(params);
src 文件夹(在根级别,与 webpack 相同级别)我保存整个 Jekyll 内容和 .html 文件的位置。我的 footer.html 文件包含在所有文件中,导入 webpack/bundle.js。
一个dist文件夹,里面有编译好的文件,可以直接使用(在网络服务器,CDN,...)
工作原理
- 我在根文件夹中运行
webpack(它监视文件夹)
- 它构建
bundle.js 并将其放置在/dist/webpack 中。使用了一个子文件夹,以便 Jekyll 在编译时不会覆盖它(参见上面的 Jekyll 配置)。它也可能是一个文件,但我那里还有其他 webpack 发出的文件
- 它启动 Jekyll 构建和监视过程 - 在
src 上,输出到 dist
- 它启动了一个为
dist服务的livereload服务器
当我修改 webpack 文件夹中的文件时,webpack 会重建 bundle.js。 livereload 服务器看到变化并更新浏览器。
当我修改 src 中的文件时,Jekyll 会看到更改并重建 .html 文件。 livereload 服务器看到变化并更新浏览器。
希望这会有所帮助。