Webpack未生成build.js文件

5
我将我的代码库转换为Docker格式。
我有一个docker-compose文件,其中包含以下命令: command: bash -c "rm -rf node_modules && npm install && npm run dev" 一切都很正常,我使用rm -rf node_modules因为它给我一些缺失软件包的错误(来自我的MAC)。这样做只是重新创建它,并且在本地主机上运行得很好。
我还添加了卷,所以当我改变代码时,它会反映在我的容器中,这也很好用(尽管热重载不太重要)。
现在,我通常只需在我的docker-compose文件中注释掉以下行:command: bash -c "rm -rf node_modules && npm install && npm run dev",然后添加: command: bash -c "rm -rf node_modules && npm install && npm run build"来构建我的捆绑包,在生产环境中不需要node。但是,这并没有给我任何结果。
我不确定是否存在与卷相关的问题,即它在容器中被构建,但我无法从我的计算机中访问它(我认为这是不可能的,因为在本地计算机上更改代码确实会反映在我的容器中),或者由于某种原因根本没有被构建。
这是command: bash -c "rm -rf node_modules && npm install && npm run build --verbose"输出的结果。
NODE     | npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents):
NODE     | npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
NODE     | 
NODE     | added 115 packages in 11.036s
NODE     | npm info it worked if it ends with ok
NODE     | npm verb cli [ '/usr/local/bin/node',
NODE     | npm verb cli   '/usr/local/bin/npm',
NODE     | npm verb cli   'run',
NODE     | npm verb cli   'build',
NODE     | npm verb cli   '--verbose' ]
NODE     | npm info using npm@5.5.1
NODE     | npm info using node@v9.2.0
NODE     | npm verb run-script [ 'prebuild', 'build', 'postbuild' ]
NODE     | npm info lifecycle frontend@1.0.0~prebuild: frontend@1.0.0
NODE     | npm info lifecycle frontend@1.0.0~build: frontend@1.0.0
NODE     | 
NODE     | > frontend@1.0.0 build /code/client
NODE     | > cross-env NODE_ENV=production webpack --progress --hide-modules
NODE     | 
NODE     | Hash: cda5e46c2c7f4ba2903b                                                              
NODE     | Version: webpack 3.9.1
NODE     | Time: 27298ms
NODE     |        Asset     Size  Chunks                    Chunk Names
NODE     |     build.js  1.29 MB       0  [emitted]  [big]  main
NODE     | build.js.map  7.65 MB       0  [emitted]         main
NODE     | npm verb lifecycle frontend@1.0.0~build: unsafe-perm in lifecycle true
NODE     | npm verb lifecycle frontend@1.0.0~build: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/code/client/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NODE     | npm verb lifecycle frontend@1.0.0~build: CWD: /code/client
NODE     | npm info lifecycle frontend@1.0.0~postbuild: frontend@1.0.0
NODE     | npm verb exit [ 0, true ]
NODE     | npm info ok

我的webpack配置文件开头如下所示:
var path = require('path')
var webpack = require('webpack') 

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, '../static/dist/'),
    publicPath: '/dist/',
    filename: 'build.js'
  },

至少之前这个方法是有效的,因为我的应用程序看起来是这样的:

- manage.py
- static
  - dist
  - others
- client
  - webpack.config.js

为什么dist中没有任何文件被构建?

更新

我使用了exec命令查看容器内部,但是我找不到build.js文件。我还在/code/static/dist目录下运行了touch abc.txt命令,在本地主机上也创建了该文件,即数据卷正常工作。这必须是webpack而不是docker的问题。

更新2

我还尝试了完整路径,如下所示,但仍然没有结果:

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, '/code/static/dist'),
    publicPath: '/dist/',
    filename: 'build.js'
  },

编辑 3

我试图查找 build.js 文件,但我发现了这些文件,但我认为那些不是我的 build.js 文件:

root@0xxxxxx:/code# find . -name build.js
./client/node_modules/node-forge/nodejs/build.js
./client/node_modules/errno/build.js
./client/node_modules/vue-template-compiler/build.js
./client/node_modules/builtin-status-codes/build.js
./client/node_modules/webpack-dev-middleware/node_modules/mime/src/build.js
./client/node_modules/node-gyp/lib/build.js
./client/node_modules/node-sass/scripts/build.js
./client/node_modules/mime/build/build.js
./client/node_modules/npm/node_modules/node-gyp/lib/build.js
./client/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/node_modules/readable-stream/node_modules/isarray/build/build.js
./client/node_modules/npm/lib/install/action/build.js
./client/node_modules/npm/lib/build.js

请发布您的Dockerfile以及运行它的方式。 - TJ Biddle
我已经解决了错误,感谢@TJBiddle。 - Costantin
4个回答

3
您的路径有误。您将build.js文件构建在项目目录之外。
只需更改为以下内容: path: path.resolve(__dirname, 'static/dist')

@Costantin,你能给我最新的webpack.config.js和应用程序结构吗?我想在本地试一下。 - Martin

3

我已经解决了这个问题。我试了很多种方法,所以我不完全确定是否是这种方法起作用了,但是创建一个新文件并将我的docker-compose上传到该文件中使其正常工作。我认为这可能与文件权限有关。如果你遇到这个错误,请检查文件权限。


2
您缺少变量路径声明。但是,webpack应该在没有它的情况下压缩,所以不确定这是否是原因。
var path = require('path');

非常抱歉,我以为它们在webpack中很常见。但我确实在顶部加了以下代码: var path = require('path') var webpack = require('webpack') 仍然没有效果,您有什么想法是什么原因吗? - Costantin
1
尝试使用 docker exec 命令进入容器并查看是否已构建。 - Andrija Ćeranić
嗨@AndrijaĆeranić,我尝试了,但无法找到build.js的任何位置。我还在/code/static/dist内运行了touch abc.txt,并且它也在我的本地主机上创建了,即卷工作正常。还可能是什么问题? - Costantin

2
尝试将路径中的/dist/删除。在我的机器上可以正常工作。
module.exports = {
    entry: './src/main.js',
    output: {
       path: path.resolve(__dirname, '../static'),
       publicPath: '/dist/',
       filename: 'build.js'
    },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接