亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 webpack 包在主機上成功構建但不在 docker 容器中?

為什么我的 webpack 包在主機上成功構建但不在 docker 容器中?

牧羊人nacy 2022-01-20 20:40:57
我的項目有一個這樣的monorepo結構:babel.config.js  a-something  b-something我的項目根目錄中有 babel 配置文件,并且包a-something和b-something. 在包里面a-something我有以下 webpack 配置:const path = require('path')module.exports = {  target: 'node',  entry: './src/index.js',  output: {    filename: 'bundle.js',    path: path.resolve(__dirname, 'build')  },  devtool: 'source-map',  module: {    rules: [      {        test: /\.js?$/,        use: {          loader: 'babel-loader',          options: {            rootMode: 'upward'          }        },        include: [          path.resolve(__dirname, 'src'),          /node_modules\/a-/,          /node_modules\/b-/        ]      }    ]  }}在包里面a-something我有以下package.json:{  "name": "a-something",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "prod:build": "webpack --config webpack.config.js",    "prod:start": "node build/bundle.js"  },  "author": "",  "license": "ISC",  "dependencies": {    "express": "^4.16.2",    "graphql": "^14.5.8",    "graphql-request": "^1.8.2",    "graphql-tag": "^2.10.1",    "b-something": "^1.0.0",    "node-fetch": "^2.6.0",    "sitemap": "^5.0.0"  },  "devDependencies": {    "webpack": "3.5.6",    "@babel/polyfill": "7.7.0"  }}我的根 package.json 具有以下依賴項:"@babel/cli": "^7.5.5","@babel/core": "^7.5.5","babel-loader": "8.0.6"最后我的 Dockerfile 里面的包a-something是:FROM node:10.15.1COPY ./package.json /src/package.jsonENV PORT 3000ENV NODE_ENV productionWORKDIR /srcRUN npm installCOPY ./lerna.json /src/lerna.jsonCOPY ./packages/a-something/package.json /src/packages/a-something/package.jsonCOPY ./packages/b-something/package.json /src/packages/b-something/package.jsonRUN npm run cleanCOPY . /srcWORKDIR /src/packages/a-somethingRUN npm run prod:buildRUN echo "FINISHED BUILDING!" EXPOSE ${PORT}CMD ["npm" , "run", "prod:start"]我的主機操作系統是 macOS Mojave。也許 Lerna 生成的符號鏈接在 Debian 上的處理方式不同(由 node image使用)?更新:通過將所有與 babel 相關的 npm 包從根 package.jsondevDependencies的部分移動,問題得到解決。dependencies有誰知道為什么這會解決問題?
查看完整描述

1 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

正如我在問題的更新部分中提到的,解決方案是將所有與 babel 相關的包移動到devDependencies根 package.json 的部分。


但為什么這有幫助?


問題是我NODE_ENV在 Dockerfile 中設置為生產。如果設置為生產,npm將不會安裝開發依賴項。NODE_ENV在主機上我沒有這樣的變量。此外@babel/polyfill,根據 babel docs ,另一個問題是:


因為這是一個 polyfill(它將在您的源代碼之前運行),我們需要它是一個依賴項,而不是一個 devDependency


根據文檔 @babel/polyfill也已棄用,因此更好的解決方案是:


添加"babel-loader": "8.0.6"到根 package.json

devDependencies在a-somethingpackage.json中有以下內容:

    "devDependencies": {

        "webpack": "3.5.6",

        "core-js": "^3.4.7",

        "regenerator-runtime": "^0.13.3"

      }

將這兩行放在最頂部的條目 Javascript 文件中:

import 'core-js/stable'

import 'regenerator-runtime/runtime'

最后使用這個 webpack 配置:

    const path = require('path')


    module.exports = {

      target: 'node',

      entry: './src/index.js',

      output: {

        filename: 'bundle.js',

        path: path.resolve(__dirname, 'build')

      },

      module: {

        rules: [

          {

            test: /\.js?$/,

            use: {

              loader: 'babel-loader',

              options: {

                rootMode: 'upward',

                presets: [

                  ['@babel/preset-env', {

                    corejs: 3,

                    useBuiltIns: 'usage'

                  }]

                ]

              }

            },

            include: [

              path.resolve(__dirname, 'src'),

                /node_modules\/a-/,

                /node_modules\/b-/

            ]

          }

        ]

      }

    }


查看完整回答
反對 回復 2022-01-20
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號