NodeJs在多平台运行的坑坑洼洼

window和linux 设置环境变量的不同

我们经常会在package.json里设置不同的打包命令

用来区分是打测试环境的包还是正式环境的包

{
    "scripts": {
        "dev": "cross-env NODE_ENV=dev node webpack.config.js ",
        "production": "cross-env NODE_ENV=production node webpack.config.js "
    }
}

这里主要用了cross-env

来兼容window和linux设置环境变量的不同

spawn 执行 命令 多平台命令名 不一致

这里以 npm install为例

用child_process的spawn执行 npm install时,

window的第一个参数要是npm.cmd 而linux则是npm

为了兼容不同平台 用了 cross-spawn

let { spawn } = require('cross-spawn')

let spawnInstall = spawn.sync('npm', ['install'], {
    cwd: path.join(__dirname, '../','template', 'jquery')
})

spawn 执行命令 尽量使用局部命令

像babel-cli webpack 等这些命令 和容易直接写成

let { spawn } = require('child_process')

spawn('webpack', ...)

假设开发者本机上全局装了 webpack 就会OK

但是没装就不行了

所以我们需要把webpack安装在本项目的 node_modules 并且 使用node_modules的webpack命令

在package.json 里增加 webpack

spawn((path.join(__dirname, '..','node_modules', '.bin', 'webpack'), ...)

在node_modules里假设插件里有命令行设置 那么都会在本项目的node_modules/bin里

path 模块处理路径

假设现在场景是: node要把本地文件上传到linux服务器

假设开发是在 mac上开发的 很可能直接这样拼接 linux服务器的文件路径 path.join(....)

但是假如使用者在win上使用 path.join 就会按win的文件规则来, 这样很明显生成的服务器路径是错误的

而正确的是应该强制使用linux的文件规则 path.posix.join(...)

而与之对应的强制使用win的文件规则 path.win32.join(...)

© 404mzk all right reserved,powered by Gitbookhttp://blog.404mzk.com 该文件修订时间: 2019-03-01 10:00:19

results matching ""

    No results matching ""