npm包:package.json处理

时间:2017-08-16 18:46:27

标签: json node.js npm package.json

我正在尝试创建可重复使用的NPM模块。我之后的教程说我需要package.json文件夹中的dist文件。所以一开始我只是将package.json文件从我项目的根目录复制到dist文件夹中,一切都很好。

问题是,在源代码控制方面,你真的不想要检查dist文件夹中的任何内容,所以我做的是创建一个package.dist.json文件我的项目的根,然后在构建步骤中将其复制到dist文件夹并重命名。

这不起作用。这是我的构建脚本:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "transpile": "ngc",
    "package": "rollup -c",
    "minify": "uglifyjs dist/bundles/test-service.umd.js --screw-ie8 --compress --mangle --comments --output dist/bundles/test-service.umd.min.js",
    "build": "copyfiles package.dist.json dist && rename dist/package.dist.json dist/package.json && npm run transpile && npm run package && npm run minify && npm pack dist/"
},

以下是我的devDependencies:

"devDependencies": {
    "@angular/compiler": "^4.0.0",
    "@angular/compiler-cli": "^4.0.0",
    "rollup": "^0.47.4",
    "typescript": "^2.4.2",
    "uglify-js": "^3.0.27",
    "copyfiles": "^1.0.0",
    "rename-cli": "^4.0.0"
  },

这不起作用我收到错误说:

  

该命令的语法不正确。

我甚至不确定这是否是最佳方法。有更好的方法吗?如果没有,为什么我的build任务不起作用?

这是rollup.config.js:

import angularInline from 'rollup-plugin-angular-inline';

export default {
    entry: 'dist/hello-world.js',
    dest: 'dist/bundles/hello-world.umd.js',
    sourceMap: 'inline',
    format: 'umd',
    moduleName: 'hello-world-app',
    globals: {
        '@angular/core': 'ng.core',
        '@angular/router': 'ng.router'
    },
    plugins: [
        angularInline({
            include: './dist/src/**/*.component.js'
        })
    ],
    external: ['@angular/core', '@angular/router'],
    treeshake: true
}

1 个答案:

答案 0 :(得分:0)

您似乎正在使用Windows,因为quick google search表示该错误是Windows命令行错误。如果您一直在寻求有关命令行问题的建议(以供将来参考),此信息非常有用。

尝试以下方法:

  • 将您正在复制/移动的文件名包装在引号

    copyfiles "package.dist.json" dist
    
  • 复制/移动时使用Windows路径分隔符\(不是unix / linux分隔符/

    rename dist\package.dist.json dist\package.json
    # also try with quotes
    rename "dist\package.dist.json" "dist\package.json"
    

但是,无论何时尝试构建可分发模块,用户可能希望在不同平台上分叉代码并运行自己的构建,我建议使用更强大的技术来构建可跨平台工作的代码。

  • 选项1 :gulp,grunt和/或朋友
  • 选项2 :在NodeJS中编写构建代码。这可以是一个简单的JS文件,它使用NodeJS和内置的fs模块完成所有复制,重命名等操作。您的构建命令只是"build": "node my-build-script.js"